I need a fast way to keep a running maximum of a numpy array. For example, if my array was:
x = numpy.array([11,12,13,20,19,18,17,18,23,21])
I'd want:
numpy.array([11,12,13,20,20,20,20,20,23,23])
Obviously I could do this with a little loop:
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
But my arrays have hundreds of thousands of entries and I need to call this many times. It seems like there's got to be a numpy trick to remove the loop, but I can't seem to find anything that will work. The alternative will be to write this as a C extension, but it seems like I'd be reinventing the wheel.
Given a numpy array, you can find the maximum value of all the elements in the array. To get the maximum value of a Numpy Array, you can use numpy function numpy. max() function.
The numpy. max() function computes the maximum value of the numeric values contained in a NumPy array. It can also compute the maximum value of the rows, columns, or other axes.
numpy. amax() will find the max value in an array, and numpy. amin() does the same for the min value.
maximum() function is used to find the element-wise maximum of array elements. It compares two arrays and returns a new array containing the element-wise maxima.
numpy.maximum.accumulate
works for me.
>>> 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])
As suggested, there is 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])
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With