Can anybody explain me the numpy.indices()?

The already posted answers are still complex so here a the simplest way to understand this.


Step 1: Let's create a 2x2 grid

ids = np.indices((2,2))

Step 2: Now let's unpack the i,j indices

i, j = ids 

These are the indices i,j:

print(i)
[[0 0]
 [1 1]]

print(j)
[[0 1]
 [0 1]]

Step 3: Understand what i,j represent

The easy way to think of it is to make pairs as (i0,j0), (i1,j1), (i2,j2), (i3,j3) i.e. match each element of i with the corresponding element of j.

So we get: (0,0), (0,1), (1,0), (1,1).

These are exactly the indices of a 2x2 grid:

enter image description here


Suppose you have a matrix M whose (i,j)-th element equals

M_ij = 2*i + 3*j

One way to define this matrix would be

i, j = np.indices((2,3))
M = 2*i + 3*j

which yields

array([[0, 3, 6],
       [2, 5, 8]])

In other words, np.indices returns arrays which can be used as indices. The elements in i indicate the row index:

In [12]: i
Out[12]: 
array([[0, 0, 0],
       [1, 1, 1]])

The elements in j indicate the column index:

In [13]: j
Out[13]: 
array([[0, 1, 2],
       [0, 1, 2]])