运行最大numpy数组值

时间:2011-08-31 00:44:47

标签: python numpy

我需要一种快速的方法来保持numpy数组的运行最大值。例如,如果我的数组是:

x = numpy.array([11,12,13,20,19,18,17,18,23,21])

我想要:

numpy.array([11,12,13,20,20,20,20,20,23,23])

显然我可以通过一个小循环来做到这一点:

def running_max(x):
    result = [x[0]]
    for val in x:
        if val > result[-1]:
            result.append(val)
        else:
            result.append(result[-1])
    return result

但是我的阵列有数十万个条目,我需要多次调用它。似乎必须有一个笨拙的技巧来删除循环,但我似乎找不到任何可行的东西。另一种方法是将其写为C扩展,但似乎我要重新发明轮子。

2 个答案:

答案 0 :(得分:43)

numpy.maximum.accumulate适合我。

>>> import numpy
>>> numpy.maximum.accumulate(numpy.array([11,12,13,20,19,18,17,18,23,21]))
array([11, 12, 13, 20, 20, 20, 20, 20, 23, 23])

答案 1 :(得分:3)

根据建议,有scipy.maximum.accumulate

In [9]: x
Out[9]: [1, 3, 2, 5, 4]

In [10]: scipy.maximum.accumulate(x)
Out[10]: array([1, 3, 3, 5, 5])