numpy: what is the logic of the argmin() and argmax() functions?

argmax, arrays, numpy, python

Solution

By adding the `axis` argument, NumPy looks at the rows and columns individually. When it's not given, the array `a` is flattened into a single 1D array.

`axis=0` means that the operation is performed down the columns of a 2D array `a` in turn.

For example `np.argmin(a, axis=0)` returns the index of the minimum value in each of the four columns. The minimum value in each column is shown in bold below:

>>> a
array([[ 1,  2,  4,  7],  # 0
       [ 9, 88,  6, 45],  # 1
       [ 9, 76,  3,  4]]) # 2

>>> np.argmin(a, axis=0)
array([0, 0, 2, 2])

On the other hand, `axis=1` means that the operation is performed across the rows of `a`.

That means `np.argmin(a, axis=1)` returns `[0, 2, 2]` because `a` has three rows. The index of the minimum value in the first row is 0, the index of the minimum value of the second and third rows is 2:

>>> a
#        0   1   2   3
array([[ 1,  2,  4,  7],
       [ 9, 88,  6, 45],
       [ 9, 76,  3,  4]])

>>> np.argmin(a, axis=1)
array([0, 2, 2])

Problem

I can not understand the output of `argmax` and `argmin` when use with the axis parameter. For example: ``` >>> a = np.array([[1,2,4,7], [9,88,6,45], [9,76,3,4]]) >>> a array([[ 1, 2, 4, 7], [ 9, 88, 6, 45], [ 9, 76, 3, 4]]) >>> a.shape (3, 4) >>> a.size 12 >>> np.argmax(a) 5 >>> np.argmax(a,axis=0) array([1, 1, 1, 1]) >>> np.argmax(a,axis=1) array([3, 1, 1]) >>> np.argmin(a) 0 >>> np.argmin(a,axis=0) array([0, 0, 2, 2]) >>> np.argmin(a,axis=1) array([0, 2, 2]) ``` As you can see, the maximum value is the point (1,1) and the minimum one is the point (0,0). So in my logic when I run: - `np.argmin(a,axis=0)` I expected `array([0,0,0,0])` - `np.argmin(a,axis=1)` I expected `array([0,0,0])` - `np.argmax(a,axis=0)` I expected `array([1,1,1,1])` - `np.argmax(a,axis=1)` I expected `array([1,1,1])` What is wrong with my understanding of things?

Original source