python numpy花哨索引

1 import numpy as np
2 rand = np.random.RandomState(42)
3 
4 x = rand.randint(100, size=10)
5 print(x)
[51, 92, 14, 71, 60, 20, 82, 86, 74, 74]

获取元素:

[x[3], x[7], x[2]]
[71, 86, 14]
#  通过传递索引的单个列表或数组来获取元素
ind = [3, 7, 4] x[ind]
array([71, 60, 86])

利用花哨的索引,结果的形状与索引数组的形状一致,而不是 与被索引数组的形状一致:

ind = np.array([[3, 7], [4, 5]])
x[ind]
array([[71, 86],
       [60, 20]])

花哨的索引对多个维度也适用。

花哨的索引返回的值反映的是广播后的索引数组的形状,而不是被索引数组的形状。

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

In [13]: X
Out[13]:
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

In [14]: row = np.array([0, 1, 2])

In [15]: col = np.array([2, 1, 3])

In [16]: X[row, col] 
Out[16]: array([ 2,  5, 11]) #  第一个值是X[0, 2], 第二个值是X[1, 1]

In [17]: X[row[:, np.newaxis], col]
Out[17]:
array([[ 2,  1,  3],
       [ 6,  5,  7],
       [10,  9, 11]])

In [18]: row[:, np.newaxis] * col
Out[18]:
array([[0, 0, 0],
       [2, 1, 3],
       [4, 2, 6]])

In [19]: row * col
Out[19]: array([0, 1, 6])

In [20]: X[np.array([0, 1, 2]), np.array([2, 1, 3])]
Out[20]: array([ 2,  5, 11])

In [22]: X[np.array([0, 1, 2])[:, np.newaxis], np.array([2, 1, 3])]
Out[22]:
array([[ 2,  1,  3],
       [ 6,  5,  7],
       [10,  9, 11]])

In [23]: np.array([0, 1, 2])[:, np.newaxis]
Out[23]:
array([[0],
       [1],
       [2]])

你可能感兴趣的:(python numpy花哨索引)