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
函数,它就像一个符咒:)