Python 运行numpy数组值的最大值

Python 运行numpy数组值的最大值,python,numpy,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]:

我需要一种快速的方法来保持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

但是我的数组有数十万个条目,我需要多次调用它。似乎必须有一个numpy技巧来移除循环,但我似乎找不到任何有效的方法。另一种选择是将其编写为C扩展,但似乎我将重新发明轮子。

正如建议的那样,有
scipy.max.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])

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])

我认为累积最大跑步量对我来说是一个窗口。不幸的是,谷歌搜索没有发现任何有用的东西。我没有安装numpy,但max.accumulate可能会工作。检查文档中的“累积”。@andrew max在numpy中没有累积属性。不过,如果是这样的话,那将是一个很好的内置解决方案。@JoshAdel:
numpy.maximum.accumulate
wim就在我之前到达了那里。不需要从scipy名称空间获取它。这是一个小家伙。scipy.*中numpy符号的重复是数字时代遗留下来的向后兼容性。对此表示抱歉。我想是个人偏见吧。