基础索引
神奇索引
布尔索引
import numpy as np
# 一维向量
x = np.arange(10)
x
0~9
# 二维向量,一般用大写字母
X = np.arange(20).reshape(4,5)
X
输出一个四行五列的向量组
x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
print(x[2], x[5], x[-1])
2 5 9
x[2:4]
array([2, 3])
x[2:-1]
array([2, 3, 4, 5, 6, 7, 8])
x[-3:]
array([7, 8, 9])
x[:-3]
array([0, 1, 2, 3, 4, 5, 6])
X
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]])
# 分别用行坐标、列坐标,实现行列筛选
# X[0][0]
X[0, 0]
0
X[-1, 2]
17
# 可以省略后续索引值,返回的数据是降低一个维度的数组
# 这里的2,其实是要筛选第2行
X[2]
array([10, 11, 12, 13, 14])
# 筛选-1对应的行
X[-1]
array([15, 16, 17, 18, 19])
# 筛选多行
X[:-1]
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
# 筛选多行,然后筛选多列
X[:2, 2:4]
array([[2, 3],
[7, 8]])
# 筛选所有行,然后筛选多列
X[:, 2]
array([ 2, 7, 12, 17])
x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
x[2:4] = 666
x
array([ 0, 1, 666, 666, 4, 5, 6, 7, 8, 9])
X[:1, :2] = 666
X
array([[666, 666, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[ 10, 11, 12, 13, 14],
[ 15, 16, 17, 18, 19]])
其实就是:用整数数组进行的索引,叫神奇索引
x = np.arange(10)
x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
x[[3,4,7]]
array([3, 4, 7])
indexs = np.array([[0, 2], [1, 3]])
x[indexs]
array([[0, 2],
[1, 3]])
# 随机生成1到100之间的,10个数字
arr = np.random.randint(1,100,10)
arr
array([92, 16, 12, 57, 1, 66, 26, 55, 68, 84])
# arr.argsort()会返回排序后的索引index
# 取最大值对应的3个下标
arr.argsort()[-3:]
array([8, 9, 0], dtype=int64)
arr[arr.argsort()[-3:]]
array([68, 84, 92])
X = np.arange(20).reshape(4, 5)
X
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]])
# 筛选多行,列可以省略
X[[0, 2]]
array([[ 0, 1, 2, 3, 4],
[10, 11, 12, 13, 14]])
X[[0, 2], :]
array([[ 0, 1, 2, 3, 4],
[10, 11, 12, 13, 14]])
# 筛选多列,行不能省略
X[:, [0,2,3]]
array([[ 0, 2, 3],
[ 5, 7, 8],
[10, 12, 13],
[15, 17, 18]])
# 同时指定行列-列表
# 返回的是[(0,1), (2,3), (3,4)]位置的数字
X[[0, 2, 3], [1, 3, 4]]
array([ 1, 13, 19])