Ejecución máxima de valores de matriz numpy

Necesito una forma rápida de mantener un máximo de ejecución de una matriz numpy. Por ejemplo, si mi matriz fuera:

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

Me gustaria:

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

Obviamente podría hacer esto con un pequeño bucle:

 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 

Pero mis arreglos tienen cientos de miles de entradas y debo llamar a esto muchas veces. Parece que tiene que haber un truco para eliminar el bucle, pero parece que no puedo encontrar nada que funcione. La alternativa será escribir esto como una extensión C, pero parece que estaría reinventando la rueda.

numpy.maximum.accumulate funciona para mí.

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

Como se sugiere, hay 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])