39

I'm trying to return maximum values of multiple array in an element-wise comparison. For example:

A = array([0, 1, 2])
B = array([1, 0, 3])
C = array([3, 0, 4])

I want the resulting array to be array([3,1,4]).

I wanted to use numpy.maximum, but it is only good for two arrays. Is there a simple function for more than two arrays?

Georgy
  • 12,464
  • 7
  • 65
  • 73
Wang Yuan
  • 453
  • 1
  • 5
  • 8

3 Answers3

62

With this setup:

>>> A = np.array([0,1,2])
>>> B = np.array([1,0,3])
>>> C = np.array([3,0,4])

You can either do:

>>> np.maximum.reduce([A,B,C])
array([3, 1, 4])

Or:

>>> np.vstack([A,B,C]).max(axis=0)
array([3, 1, 4])

I would go with the first option.

Daniel
  • 19,179
  • 7
  • 60
  • 74
19

You can use reduce. It repeatedly applies a binary function to a list of values...

For A, B and C given in question...

np.maximum.reduce([A,B,C])

 array([3,1,4])

It first computes the np.maximum of A and B and then computes the np.maximum of (np.maximum of A and B) and C.

NelsonGon
  • 13,015
  • 7
  • 27
  • 57
Gurmeet Singh
  • 395
  • 1
  • 6
1

You can also use:

np.column_stack([A, B, C]).max(axis=1)

The result is the same as the solutions from the other answers.

I use Pandas more heavily than NumPy so for me it's easier to think of 1D arrays as something similar to Pandas Series. The above would be equivalent to:

pd.concat([A, B, C], axis=1).max(axis=1)
BrunoF
  • 3,239
  • 26
  • 39