在做张量运算的时候经常会用到索引,这里记录一下numpy包中的ndarray中的高级索引
1 整数索引
对于矩阵,有行索引,列索引
import numpy as np
a = np.array([[1,2,3], [4,5,6],[7,8,9]])
b = a[[0,2],[0,2]]
c = a[1,2]
print(a)
print(b)
print(c)
#输出
[[1 2 3]
[4 5 6]
[7 8 9]]
[1 9]
6
注意: 对多个数据进行索引时,将行索引放一起,列索引放一起.
import numpy as np
a = np.array([[1,2,3], [4,5,6],[7,8,9]])
rows = np.array([[0,0],[2,2]])
cols = np.array([[0,2],[0,2]])
b = a[rows,cols]
print(b)
#输出
[[1 3]
[7 9]]
有点意思啊,这个格式返回的还是一个ndarray.
还可以借助切片:或…与索引数组组合.如下面例子
import numpy as np
a = np.array([[1,2,3], [4,5,6],[7,8,9]])
b = a[1:3, 1:3]
c = a[1:3,[1,2]]
d = a[...,1:]
print(b)
print(c)
print(d)
#输出
[[5 6]
[8 9]]
[[5 6]
[8 9]]
[[2 3]
[5 6]
[8 9]]
2 布尔索引
import numpy as np
a = np.array([[1,2,3], [4,5,6],[7,8,9]])
b = a[a > 4]
print(b)
#输出
[5 6 7 8 9]
第二个例子:
import numpy as np
a = np.array([np.nan, 1,2,np.nan,3,4,5])
b = a[~np.isnan(a)]
print(b)
#输出
[ 1. 2. 3. 4. 5.]
关于NaN,以及与None的区别我在另一篇博客中有写.
这里用了取补符号 ~