1、 单个元素索引
1、1 一维数组
x = np.arange(1, 13)
print(x[1])
2
1、2 多维数组
x = np.arange(1, 13).reshape(3, 4)
print(x[1])
print(x[1][1]) #x[1,1]
[5 6 7 8]
6
2、 切片索引
2、1 多维数组
可以用冒号代替某一行/列的所有值。
x = np.arange(1, 13).reshape(3, 4)
print(x[2, :])
print(x[:, 1])
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
[ 9 10 11 12]
[ 2 6 10]
选取某几行某几列。
print(x[1, 2:4])
[7 8]
3、 索引数组
根据索引数创建一个数组,其中每个数值由被索引数组中对应的值所替换。
3、1 一维数组
允许使用负值。
print(x[np.array([2, 5, 8, 10])])
print(x[np.array([2, 5, -5, 10])])
[ 3 6 9 11]
[ 3 6 8 11]
3、2 多维数组
print(x[np.array([0, 1, 2]), np.array([0, 1, 2])])
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
[ 1 6 11]
只进行部分索引时:
print(x[np.array([0, 1, 2])])
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
索引数组可以与标量相结合:
print(x[np.array([0, 1, 2]), 1])
[ 2 6 10]
4、 布尔索引
4、1 索引维数与数组维数相同
y = x > 10
print(y)
print(x[y])
[[False False False False]
[False False False False]
[False False True True]]
[11 12]
4、2 索引维数小于数组维数
一维索引维数需要与二维数组的行数相匹配,二位索引维数需要与三维数组的行列数相匹配。
y = x > 6
print(y[:, 2])
print(x[y[:, 2]])
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
[False True True]
[[ 5 6 7 8]
[ 9 10 11 12]]
a = np.arange(30).reshape(2, 3, 5)
b = np.array([[True, True, False], [False, True, True]])
print(a[b])
[[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]]
[[15 16 17 18 19]
[20 21 22 23 24]
[25 26 27 28 29]]]
[[ True True False]
[False True True]]
5、 索引数组与切片相结合?
print(x[np.array([0, 2]), 1:3])
[[ 2 3]
[10 11]]
6、 索引数组与布尔相结合
y = x > 6
print(x[y[:, 2], 1:3])
[[ 5 6 7 8]
[ 9 10 11 12]]
[[ 6 7]
[10 11]]
|