I am looking for a vectorized way to index a numpy.array
by numpy.array
of indices.
For example:
import numpy as np
a = n
It’s possible, although somewhat non-obvious to do this as follows:
>>> a[np.arange(a.shape[0])[:, None], inds]
array([[0, 3],
[6, 0],
[0, 9]])
The index np.arange(a.shape[0])
simply indexes the rows to which the array of column indices inds
applies. Appending [:, None]
modifies the shape of this array such that its shape is (a.shape[0], 1)
, i.e. each row index is in a separate row of a 1-column-wide 2D array.
The basic principle is that the number of dimensions in the index arrays must agree, and their shapes must also do so. See documentation for np.ix_
to get a feel for this.