Python 将自定义numba njit函数应用于对象
通过Python 将自定义numba njit函数应用于对象,python,pandas,numba,Python,Pandas,Numba,通过pandas1.0.0版本,.apply现在可以使用numba-jit功能 使用滚动时,是否有方法利用此功能 例如,我有一个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):
pandas
1.0.0版本,.apply
现在可以使用numba-jit
功能
使用滚动时,是否有方法利用此功能
例如,我有一个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”未能进行类型推断,原因是:非精确类型pyobject
使用njit
而不是jit
应用numba\u mean
时的错误回溯
此错误可能是由以下参数引起的:
-参数0:无法确定
我想知道是否有一种方法可以将numbafied函数与pandas
滚动对象一起使用?您需要指定要让pandas知道您要使用Numba:
df.A.rolling(3).apply(numba_mean, engine='numba', raw=True)
Pandas可以jit
为您提供该功能,但我自己做时会得到更快的结果。也许Numba正在为每次调用.apply()
重新编译,下面的计时包括编译时间
有了这样一个简单的函数,并且每次调用都有少量数据(window=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)})
谢谢!我有一个更复杂的njit
函数,它就像一个符咒:)