I have a NumPy array:
[[ 0. 1. 2. 3. 4.]
[ 7. 8. 9. 10. 4.]
[ 14. 15. 16. 17. 4.]
[ 1. 20. 21. 22. 23.]
[ 27. 28. 1. 20. 29.]]
which I want to quickly find the coordinates of specific values and avoid Python loops on the array. For example the number 4
is on:
row 0 and col 4
row 1 and col 4
row 2 and col 4
and a search function should return a tuple:
((0,4),(1,4),(2,4))
Can this be done directly via NunmPy's functions?
import numpy as np A = np. array([[1, 1], [2, 2]]) B = np. array([[1, 1], [2, 2]]) print(A == B) In this resulting matrix, each element is a result of a comparison of two corresponding elements in the two arrays.
Steps to find the most frequency value in a NumPy array: Create a NumPy array. Apply bincount() method of NumPy to get the count of occurrences of each element in the array. The n, apply argmax() method to get the value having a maximum number of occurrences(frequency).
Python has a method to search for an element in an array, known as index(). If you would run x. index('p') you would get zero as output (first index).
If a
is your array, then you could use:
ii = np.nonzero(a == 4)
or
ii = np.where(a == 4)
If you really want a tuple, you can convert from the tuple of arrays to the tuple of tuples, but the return value from the numpy functions is convient for then doing other operations on your array.
Conversion to a tuple for the OP's specification:
tuple(zip(*ii))
a = numpy.array([[ 0., 1., 2., 3., 4.],
[ 7., 8., 9., 10., 4.],
[ 14., 15., 16., 17., 4.],
[ 1., 20., 21., 22., 23.],
[ 27., 28., 1., 20., 29.]])
print numpy.argwhere(a == 4.)
prints
[[0 4]
[1 4]
[2 4]]
The usual caveats for floating point comparisons apply.
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