In [1]:
import numpy as np

In [2]:
a = np.arange(10) * 10
print(a)


[ 0 10 20 30 40 50 60 70 80 90]

In [3]:
print(a[5])


50

In [4]:
print(a[8])


80

In [5]:
print(a[[5, 8]])


[50 80]

In [6]:
print(a[[5, 4, 8, 0]])


[50 40 80  0]

In [7]:
print(a[[5, 5, 5, 5]])


[50 50 50 50]

In [8]:
idx = np.array([[5, 4], [8, 0]])
print(idx)


[[5 4]
 [8 0]]

In [9]:
print(a[idx])


[[50 40]
 [80  0]]

In [10]:
# print(a[[[5, 4], [8, 0]]])
# IndexError: too many indices for array

In [11]:
print(a[[[[5, 4], [8, 0]]]])


[[50 40]
 [80  0]]

In [12]:
a_2d = np.arange(12).reshape((3, 4))
print(a_2d)


[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

In [13]:
print(a_2d[0])


[0 1 2 3]

In [14]:
print(a_2d[2])


[ 8  9 10 11]

In [15]:
print(a_2d[[2, 0]])


[[ 8  9 10 11]
 [ 0  1  2  3]]

In [16]:
print(a_2d[[2, 2, 2]])


[[ 8  9 10 11]
 [ 8  9 10 11]
 [ 8  9 10 11]]

In [17]:
print(a_2d[:, 1])


[1 5 9]

In [18]:
print(a_2d[:, 3])


[ 3  7 11]

In [19]:
print(a_2d[:, 1:2])


[[1]
 [5]
 [9]]

In [20]:
print(a_2d[:, [3, 1]])


[[ 3  1]
 [ 7  5]
 [11  9]]

In [21]:
print(a_2d[:, [3, 3, 3]])


[[ 3  3  3]
 [ 7  7  7]
 [11 11 11]]

In [22]:
print(a_2d[0, 1])


1

In [23]:
print(a_2d[2, 3])


11

In [24]:
print(a_2d[[0, 2], [1, 3]])


[ 1 11]

In [25]:
# index
# [[0, 1] [2, 3]]

In [26]:
# print(a_2d[[0, 2, 1], [1, 3]])
# IndexError: shape mismatch: indexing arrays could not be broadcast together with shapes (3,) (2,)

In [27]:
print(a_2d[[[0, 0], [2, 2]], [[1, 3], [1, 3]]])


[[ 1  3]
 [ 9 11]]

In [28]:
# index
# [[0, 1] [0, 3]
#  [2, 1] [2, 3]]

In [29]:
print(a_2d[[[0], [2]], [1, 3]])


[[ 1  3]
 [ 9 11]]

In [30]:
idxs = np.ix_([0, 2], [1, 3])
print(idxs)


(array([[0],
       [2]]), array([[1, 3]]))

In [31]:
print(type(idxs))


<class 'tuple'>

In [32]:
print(type(idxs[0]))


<class 'numpy.ndarray'>

In [33]:
print(idxs[0])


[[0]
 [2]]

In [34]:
print(idxs[1])


[[1 3]]

In [35]:
print(a_2d[np.ix_([0, 2], [1, 3])])


[[ 1  3]
 [ 9 11]]

In [36]:
print(a_2d[np.ix_([2, 0], [3, 3, 3])])


[[11 11 11]
 [ 3  3  3]]

In [37]:
print(a_2d[[0, 2]][:, [1, 3]])


[[ 1  3]
 [ 9 11]]

In [38]:
a_2d = np.arange(12).reshape((3, 4))
print(a_2d)


[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

In [39]:
a_2d[np.ix_([0, 2], [1, 3])] = 100
print(a_2d)


[[  0 100   2 100]
 [  4   5   6   7]
 [  8 100  10 100]]

In [40]:
a_2d[np.ix_([0, 2], [1, 3])] = [100, 200]
print(a_2d)


[[  0 100   2 200]
 [  4   5   6   7]
 [  8 100  10 200]]

In [41]:
a_2d[np.ix_([0, 2], [1, 3])] = [[100, 200], [300, 400]]
print(a_2d)


[[  0 100   2 200]
 [  4   5   6   7]
 [  8 300  10 400]]

In [42]:
print(a_2d[[0, 2]][:, [1, 3]])


[[100 200]
 [300 400]]

In [43]:
a_2d[[0, 2]][:, [1, 3]] = 0
print(a_2d)


[[  0 100   2 200]
 [  4   5   6   7]
 [  8 300  10 400]]

In [44]:
a_2d = np.arange(12).reshape((3, 4))
print(a_2d)


[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

In [45]:
a_2d[[2, 0]] = [[100, 200, 300, 400], [500, 600, 700, 800]]
print(a_2d)


[[500 600 700 800]
 [  4   5   6   7]
 [100 200 300 400]]

In [46]:
a_2d[[2, 2]] = [[-1, -2, -3, -4], [-5, -6, -7, -8]]
print(a_2d)


[[500 600 700 800]
 [  4   5   6   7]
 [ -5  -6  -7  -8]]

In [47]:
a_2d = np.arange(12).reshape((3, 4))
print(a_2d)


[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

In [48]:
a_fancy = a_2d[np.ix_([0, 2], [1, 3])]
print(a_fancy)


[[ 1  3]
 [ 9 11]]

In [49]:
a_fancy[0, 0] = 100
print(a_fancy)


[[100   3]
 [  9  11]]

In [50]:
print(a_2d)


[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

In [51]:
a_2d = np.arange(12).reshape((3, 4))
print(a_2d)


[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

In [52]:
print(a_2d[[2, 0], ::-1])


[[11 10  9  8]
 [ 3  2  1  0]]

In [53]:
print(a_2d[::2, [3, 0, 1]])


[[ 3  0  1]
 [11  8  9]]