我需要获得数组longband
的累积最大值,直到它的[i-1]
值是RsiMa[i]
的>=
,然后转到它的“实际”[i]
值并重新开始累加。实际上,我发现实现这一点的唯一方法是通过for循环。
它可以翻译成麻木吗?
我怎样才能转换它呢?
代码:
import numpy as np
RsiMa = np.array([ 2, 4, 6, 9, 10, 8, 6, 4, 6, 8, 10, 12, 10, 8])
longband = np.array([1, 3, 2, 8, 7, 5, 4, 3, 4, 3, 7, 10, 7, 6])
for i in range(1, len(longband)):
if i > 1:
if longband[i-1] > longband[i] and longband[i-1] < RsiMa[i]:
longband[i] = longband[i-1]
预期产出:
[ 1 3 3 8 8 5 5 3 4 4 7 10 7 7 ]
我已经尝试使用np.fmax.accumate(),但在longband[i] >= RsiMa[i]
时似乎无法重新启动...
编辑:
我还尝试了Numba jit:
@numba.jit(nopython=True)
def loop(array1, arrayfilt):
for i in range(2, len(array1)):
if array1[i-1] > array1[i] and array1[i-1] <= arrayfilt[i]:
array1[i] = array1[i-1]
return array1
longband = loop(longband, RsiMa)
但是IDK为什么它没有加速它,反而导致从简单循环的15ms减慢到33ms的jit……
1条答案
按热度按时间q8l4jmvw1#
这种方法不会带来任何改进,但至少是有效的: