错误消息:TypingError:在nopython模式管道中失败(步骤:nopython前端) 功能()类型的未知属性“累加”。
如何修改以下代码?谢谢。
import numba
import numpy as np
@numba.jit(nopython=True)
def maxdd(x):
temp = np.maximum.accumulate(x) - x
ide = len(x) - np.argmax(temp[::-1]) - 1
ids = np.argmax(x[:ide])
mdd = x[ide] - x[ids]
ide += 1
return mdd, ids, ide
答案 0 :(得分:0)
我尝试过使用向量化ufunc来以这种方式计算运行最大值:
@numba.vectorize(["int32(int32,int32)","int64(int64,int64)","float32(float32,float32)"])
@numba.njit()
def nmax(x, y):
if x>y:
return x
else:
return y
@numba.njit()
def test():
a = np.arange(12)[::-1]
print(a)
return nmax.accumulate(a)
test()
但是,在Numba 0.46.0中,这会引发错误
函数类型(numba._DUFunc'nmax')的未知属性“累加”
目前看来,Numba似乎无法在nopython模式(?)下使用矢量化函数,不幸的是,这导致了预期的测试失败
[11 10 9 8 7 6 5 4 3 2 1 0]
array([11,11,11,11,11,11,11,11,11,11,11,11])
现在我们必须手动编写诸如
之类的函数@numba.njit()
def running_max(x):
rmax=x[0]
y=np.empty_like(x)
for i,val in enumerate(x):
if val>rmax: rmax=val
y[i]=rmax
return y
我已经与Numba团队筹集了issue。