gpt4 book ai didi

python-2.7 - numba不识别numpy.maximum.accumulate(),下面代码怎么修改?

转载 作者:行者123 更新时间:2023-12-03 19:28:16 36 4
gpt4 key购买 nike

错误消息:TypingError:在 nopython 模式管道中失败(步骤:nopython 前端)
Function() 类型的未知属性“累积”。

如何修改下面的代码?谢谢你。

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

最佳答案

我曾尝试使用矢量化 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 中,这会引发错误

Unknown attribute 'accumulate' of type Function(numba._DUFunc 'nmax')


目前看来 Numba 不能在 nopython 模式下使用矢量化函数(?),不幸的是,导致 un-njiting 测试给出了预期的结果

[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
我提出了一个 issue与 Numba 团队。

关于python-2.7 - numba不识别numpy.maximum.accumulate(),下面代码怎么修改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56551989/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com