问题描述
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数组。例如,如果我的数组是:
x = numpy.array([11,12,13,20,19,18,17,23,21])
我想要:
numpy.array([11,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扩展,但似乎我会重新发明轮子。