随着pandas
1.0.0版本中,.apply
现在有能力使用numba jit
功能。
使用时是否有办法利用此.apply
功能.rolling
?
例如,我有一个pandas.DataFrame
和,numba_mean
我想应用该函数以获得3个周期的滚动平均值。
import pandas as pd
import numpy as np
import numba as nb
df = pd.DataFrame({"A" : np.random.rand(10)})
@nb.jit
def numba_mean(x):
return np.sum(x) / len(x)
df.A.rolling(3).apply(numba_mean)
但是我收到以下错误,这意味着它不适用于nopython
模式。
由于功能“ numba_mean”由于以下原因而导致类型推断失败,因此编译返回到启用了循环提升的对象模式:
numba_mean
使用njit
而不是时的错误回溯jit
此错误可能是由以下参数引起的:-参数0:无法确定Numba的类型
<class 'pandas.core.series.Series'>
我想知道是否有一种方法可以对对象使用数字函数pandas
rolling
?
您需要指定engine关键字,以使熊猫知道您要使用Numba:
df.A.rolling(3).apply(numba_mean, engine='numba', raw=True)
熊猫可以jit
为您提供功能,但是我自己做时可以更快地得到结果。也许Numba正在为每个调用重新编译,.apply()
并且以下时间包括编译时间。
有了这样一个简单的功能,并且每次调用的数据量很少(窗口= 3),不太可能通过内置函数获得任何加速。
import pandas as pd
import numpy as np
import numba as nb
@nb.njit(nogil=True)
def numba_mean(x):
return np.sum(x) / x.size
def numpy_mean(x):
return np.sum(x) / x.size
df = pd.DataFrame({"A" : np.random.rand(10000)})
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句