How to find the index of a value in a 2d array in Python?

I need to figure out how I can find the whole 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 1 and 0.

 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 does not give me all the indices:

 t = [(index, row.index(1)) for index, row in enumerate(x) if 1 in row] 

Basically, this gives me only one of the indices in each row [(0, 0), (1, 2)] .

+12
python arrays numpy multidimensional-array
source share
3 answers

You can use np.where to return a tuple of arrays of indices x and y, where this condition is np.where in the 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 need a list of (x, y) pairs, you can zip use 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 may be a more efficient way to generate pairs.

+23
source share

The problem with the list comprehension that you indicated is that it goes only one level, 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)] 

If you are working with a numpy array, it is better to use the built-in functions, as suggested by ajcr.

+9
source share

Using numpy, argwhere may be the best solution:

 import numpy as np array = np.array([[1, 1, 0, 0], [0, 0, 1, 1], [0, 0, 0, 0]]) solutions = np.argwhere(array == 1) print(solutions) >>> [[0 0] [0 1] [1 2] [1 3]] 
0
source share

All Articles