I need to figure out how I can find all the index of a value in a 2d numpy array.
For example, I have the following 2d array:
([[1 1 0 0], [0 0 1 1], [0 0 0 0]])
I need to find the index of all the 1's and 0's.
1: [(0, 0), (0, 1), (1, 2), (1, 3)] 0: [(0, 2), (0, 3), (1, 0), (1, 1), (the entire all row)]
I tried this but it doesn't give me all the indexes:
t = [(index, row.index(1)) for index, row in enumerate(x) if 1 in row]
Basically, it gives me only one of the index in each row [(0, 0), (1, 2)]
.
Accessing 2D Array Elements In Java, when accessing the element from a 2D array using arr[first][second] , the first index can be thought of as the desired row, and the second index is used for the desired column. Just like 1D arrays, 2D arrays are indexed starting at 0 .
Index of element in 2D array We can also use the np. where() function to find the position/index of occurrences of elements in a two-dimensional or multidimensional array. For a 2D array, the returned tuple will contain two numpy arrays one for the rows and the other for the columns.
You can use np.where
to return a tuple of arrays of x and y indices where a given condition holds in an array.
If a
is the name of your array:
>>> np.where(a == 1) (array([0, 0, 1, 1]), array([0, 1, 2, 3]))
If you want a list of (x, y) pairs, you could zip
the two arrays:
>>> zip(*np.where(a == 1)) [(0, 0), (0, 1), (1, 2), (1, 3)]
Or, even better, @jme points out that np.asarray(x).T
can be a more efficient way to generate the pairs.
The problem with the list comprehension you provided is that it only goes one level deep, you need a nested list comprehension:
a = [[1,0,1],[0,0,1], [1,1,0]] >>> [(ix,iy) for ix, row in enumerate(a) for iy, i in enumerate(row) if i == 0] [(0, 1), (1, 0), (1, 1), (2, 2)]
That being said, if you are working with a numpy array, it's better to use the built in functions as suggested by ajcr.
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