Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Running maximum of numpy array values

Tags:

python

numpy

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.

like image 639
Peter Avatar asked Aug 31 '11 00:08

Peter


People also ask

How do you find the maximum value of a NumPy array?

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.

Does NumPy have a 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.

How do you find the maximum and minimum value of an array in NumPy?

numpy. amax() will find the max value in an array, and numpy. amin() does the same for the min value.

Which function helps find the maximum value number in NumPy?

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.


2 Answers

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]) 
like image 159
Charles Beattie Avatar answered Oct 08 '22 23:10

Charles Beattie


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]) 
like image 37
Steve Tjoa Avatar answered Oct 08 '22 23:10

Steve Tjoa