Dave
Dave

Reputation: 111

Numpy maximum(arrays)--how to determine the array each max value came from

I have numpy arrays representing July temperature for each year since 1950. I can use the numpy.maximum(temp1950,temp1951,temp1952,..temp2014) to determine the maximum July temperature at each cell.
I need the maximum for each cell..the numpy.maximum() works for only 2 arrays How do I determine the year that each max value came from?

Also the numpy.maximum(array1,array2) works comparing only two arrays.

Thanks to Praveen, the following works fine:

array1 = numpy.array( ([1,2],[3,4]) )  
array2 = numpy.array( ([3,4],[1,2]) )
array3 = numpy.array( ([9,1],[1,9]) )

all_arrays = numpy.dstack((array1,array2,array3))
#maxvalues = numpy.maximum(all_arrays)#will not work
all_arrays.max(axis=2) #this returns the max from each cell location
max_indexes = numpy.argmax(all_arrays,axis=2)#this returns correct indexes

Upvotes: 1

Views: 407

Answers (2)

Praveen
Praveen

Reputation: 7222

The answer is argmax, except that you need to do this along the required axis. If you have 65 years' worth of temperatures, it doesn't make sense to keep them in separate arrays.

Instead, put them all into a single 2D dimensional array using something like np.vstack and then take the argmax over rows.

alltemps = np.vstack((temp1950, temp1951, ..., temp2014))
maxindexes = np.argmax(alltemps, axis=0)

If your temperature arrays are already 2D for some reason, then you can use np.dstack to stack in depth instead. Then you'll have to take argmax over axis=2.

For the specific example in your question, you're looking for something like:

t = np.dstack((array1, array2))  # Note the double parantheses. You need to pass
                                 # a tuple to the function
maxindexes = np.argmax(t, axis=2)

PS: If you are getting the data out of a file, I suggest putting them in a single array to start with. It gets hard to handle 65 variable names.

Upvotes: 1

theharshest
theharshest

Reputation: 7867

You need to use Numpy's argmax

It would give you the index of the largest element in the array, which you can map to the year.

Upvotes: 0

Related Questions