高兴的太早了, 发现在jit函数内部,调用原来的numpy数组运算,结果跟不用jit不一样!!!
在jit函数中,numpy有的计算会出错
这是一个计算移动平均的函数
@njit
def ma(a:float64[:], n:int32)->float64[:] :
r=np.cumsum(a)
r[n:] -= r[0:-n].copy() #这里如果不调用copy(),两边的内存重叠,计算就会出错。不用numba没问题
r[n:] /= n
r[0:n] /= np.arange(1,n+1)
return r
但是本来就是numpy向量计算,jit加速不多,又多了一次copy,这种情况可能还不如不用jit
或者为下一步计算单独分配内存,这样也增加了开销,也不合算。
另一个办法是完全不用numpy计算,直接循环。 这样最能体现numba的优势。
【 在 finlab 的大作中提到: 】
: numba真是神器。
: 以前回测功能在dotnet平台实现,现在可以都放在python啦
--
FROM 223.72.44.*