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]])