NumPy 数组切片
- 索引是左臂右开区间,比如说x[0:9:1],只能是取到索引等于0处的元素到索引等于8处的元素,而取不到索引等于9的这个元素。元素索引都是0开始的,第一个亓素的索引是0.第一个亓素的索引是1,以此类推下去。
- 当不写start代表从起始索引处取数,当不写stop代表一直取数到最后位置。当不写step步长,代表使用默认步长1。
- start、stop、step都可以是负数
a = np.arange(10)
print(a[2: 5])
print(a[::-1])
print(a[-2:-4:-1])
# [2 3 4]
# [9 8 7 6 5 4 3 2 1 0]
# [8 7]
聚合函数
a = np.array([1, 4, 7, 9])
print(a.max(), a.min(), a.sum())
# 9 1 21
除了min,max和sum等函数,还有mean(均值),prod(数据乘法)计算所有元素的乘积,std(标准差),等等
上面的所有例子都在一个维度上处理向量。除此之外,NumPy 之美的一个关键之处是它能够将之前所看到的所有函数应用到任意维度上
不仅可以聚合矩阵中的所有值,还可以使用axis参数指定行和列的聚合
a = np.arange(1, 7).reshape(3, 2)
print(a.max(axis=0)) # 0 列 1 行
NumPy 获取元素
获取一个元素
a = np.arange(1, 13).reshape(3, 4)
print(a[1][2])
print(a[1, 2])
# 7
# 7
获取一行元素
a = np.arange(1, 13).reshape(3, 4)
print(a[1])
print(a[1, :])
# [5 6 7 8]
# [5 6 7 8]
获取一列元素
a = np.arange(1, 13).reshape(3, 4)
print(a[:, 1])
# [ 2 6 10]
通过整数数组进行索引
- 当要选取的元素不连续时,可以提供一个索引数组来选择(或修改)对应索引位置的元素。
- 通过整数数组索引,返回的是原数组的拷贝,而不是视图
a = np.arange(1, 21).reshape(5, 4)
print(a[[1, 3, 4]])
# [[ 5 6 7 8]
# [13 14 15 16]
# [17 18 19 20]]
通过布尔数组进行索引
- 我们可以提供一个布尔类型的数组(A),然后通过该数组(A)来对另外一个数组(B)进行索引(元素选取)。索引的原则为:如果为True,则选取对应位置的元素,否则不选取。
- 作用:通过布尔类型的数组进行索引是常见且实用的操作,我们通常用来进行元素选择(或过滤)操作
通过布尔数组取一维数组中的元素
a = np.array([12, 3, 23, 90, 234])
a1 = a[[True, True, False, False, True]]
print(a1)
print(a > 23)
# [ 12 3 234]
# [False False False True True]
通过布尔数组取二维数组中的元素
a = np.arange(10, 30).reshape(5, 4)
print(a[[True, True, False, True, False]]) # 这个表示选取第1,2,4行
print(a > 20)
# [[10 11 12 13]
# [14 15 16 17]
# [22 23 24 25]]
# [[False False False False]
# [False False False False]
# [False False False True]
# [ True True True True]
# [ True True True True]]
取出两个数组中相同的元素
a = np.array([1, 4, 7, 9])
b = np.array([1, 9, 12, 23])
print(a[a == b]) # 对应位置的元素,会进行比较
# [1]