I have an array of the following structure which is simplified for this question:
8 2 3 4 5 6
3 6 6 7 2 6
3 8 5 1 2 9
6 4 2 7 8 3
I wish to find the minimum value in this 2D array however using the inbuilt min function returns a value error:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
I have looked into the alternative of using np.argmin:
https://docs.scipy.org/doc/numpy/reference/generated/numpy.argmin.html
However it only evaluates along a single axis and returns the index of the minimum value along a single row/column whereas I wish to evaluate the whole array and return the lowest value not the indices.
If it is possible to return the index values of the lowest item in the array then that would be preferable also as from that the lowest value can easily be found.
EDIT: Thanks to the comments below np.min
is the solution I was looking for and I was not aware of it existing so my answer is solved.
min to return the minimum value, or equivalently for an array arrname use arrname. min() . As you mentioned, numpy. argmin returns the index of the minimum value (of course, you can then use this index to return the minimum value by indexing your array with it).
In python is very easy to find out maximum, minimum element and their position also. Python provides different inbuilt function. min() is used for find out minimum value in an array, max() is used for find out maximum value in an array. index() is used for finding the index of the element.
Find max values along the axis in 2D numpy array | max in rows or columns: If we pass axis=0 in numpy. amax() then it returns an array containing max value for each column i.e. If we pass axis = 1 in numpy.
You can use np.min()
>>> arr = np.array([[8,2,3,4,5,6],
[3,6,6,7,2,6],
[3,8,5,1,2,9],
[6,4,2,7,8,3]])
>>> arr.min()
1
Alternatively for a non-numpy solution:
>>> a = [[8,2,3,4,5,6],
... [3,6,6,7,2,6],
... [3,8,5,1,2,9],
... [6,4,2,7,8,3]]
>>> mymin = min([min(r) for r in a])
>>> mymin
1
However it only evaluates along a single axis and returns the index of the minimum value along a single row/column whereas I wish to evaluate the whole array and return the lowest value not the indices.
numpy.argmin
does not by default evaluate along a single axis, the default is to evaluate along the flattened matrix and it returns the linear index in the flattened array; from the numpy
docs that you linked:
By default, the index is into the flattened array, otherwise along the specified axis.
Either way, use numpy.amin
or numpy.min
to return the minimum value, or equivalently for an array arrname
use arrname.min()
. As you mentioned, numpy.argmin
returns the index of the minimum value (of course, you can then use this index to return the minimum value by indexing your array with it). You could also flatten into a single dimension array with arrname.flatten()
and pass that into the built-in min
function.
The four following methods produce what you want.
import numpy as np
values = np.array([
[8,2,3,4,5,6],
[3,6,6,7,2,6],
[3,8,5,1,2,9],
[6,4,2,7,8,3]])
values.min() # = 1
np.min(values) # = 1
np.amin(values) # = 1
min(values.flatten()) # = 1
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