Numba无法识别numpy.maximum.accumulate(),如何修改以下代码?

时间:2019-06-11 21:37:39

标签: python-2.7 numba

错误消息: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

1 个答案:

答案 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