一维高级索引
import numpy as np
rand = np.random.RandomState(42) # 随机种子
x = rand.randint(100,size=10)
print(x)
print([x[3],x[7],x[2]]) # 用一个数组承接多个索引
print(x[[3,7,2]]) # 直接用一个数组去索引多个值
索引出来的数组的形状与索引数组一致
ind = np.array([[1,2],
[3,4]])
print(x[ind])
多维度高级索引
X = np.arange(12).reshape(3,4)
print(X)
'''
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
'''
row = np.array([0,1,2])
col = np.array([1,2,1])
print(X[row,col])
'''
[1 6 9]
'''
X[row[:,np.newaxis],col] # 索引结合广播
'''
[[ 1, 2, 1],
[ 5, 6, 5],
[ 9, 10, 9]]
'''
X[row,col[:,np.newaxis]]
'''
[[ 1, 5, 9],
[ 2, 6, 10],
[ 1, 5, 9]]
'''
组合索引
X[2,[2,0,1]] # 广播
'''
[10, 8, 9]
'''
X[1:,[2,0,1]] # 切片加索引&广播
'''
[[ 6, 4, 5],
[10, 8, 9]]
'''
mask = np.array([1,0,1,0],dtype=bool)
X[row[:,np.newaxis],mask] # 广播&掩码&索引
'''
[[ 0, 2],
[ 4, 6],
[ 8, 10]]
'''
利用组合索引修改值
x = np.arange(10)
i = np.array([2,1,8,4])
x[i] = 99
print(x)
'''
[ 0 99 99 3 99 5 6 7 99 9]
'''
x[i] -= 10
print(x)
'''
[ 0 89 89 3 89 5 6 7 89 9]
'''