在海量的数据中,你如何挑选出符合你要求的数据呢?Numpy 这时候就来拯救你了。不管是批量划分,还是按条件筛选,都能做到。
单个选取
import numpy as np
a = np.array([1, 2, 3])
print("a[0]:", a[0]) #选择单个
print("a[1]:", a[1])
a[0]: 1
a[1]: 2
print("a[[0,1]]:\n", a[[0,1]]) #一次性选择多个
print("a[[1,1,0]]:\n", a[[1,1,0]])
a[[0,1]]:
[1 2]
a[[1,1,0]]:
[2 2 1]
######## 2 维 ######
b = np.array([
[1,2,3,4],
[5,6,7,8],
[9,10,11,12]
])
# 选第 2 行所有数
print("b[1]:", b[1])
b[1]: [5 6 7 8]
# 选第 2 行,第 1 列的数
print("b[1,0]:", b[1,0])
b[1,0]: 5
# 这个看着有点纠结,如果对应到数据,
# 第一个拿的是数据位是 [1,2]
# 第二个拿的是 [0,3]
print("b[[1,0],[2,3]]:", b[[1,0],[2,3]])
b[[1,0],[2,3]]: [7 4]
我们可以在其不同维度上挑选那个维度上对应序号上的数值。而且还能一次从原数据上选取多个数据点。
切片划分
上面已经介绍到了一个个拎出来数据的方式,基本上可以总结成,索引到具体的数上,就能拎出这个数具体的值。而有时候你会不会觉得特别麻烦, 如果我要在 100 个数中,从第一个一直找到第 50 个。我要写成这样 a[1,2,3,4….50],这样太累赘了。Numpy 也考虑得非常周全,它有一个更取巧的方式。
a = np.array([1, 2, 3, 4])
print("a[0:2]:", a[0:2]) # 从1到2
a[0:2]: [1 2]
print("a[1:]:", a[1:]) # 从2到最后
a[1:]: [2 3 4]
print("a[-2:]:", a[-2:]) # 从倒数第2 到 最后
a[-2:]: [3 4]
### 在多维上,也可以进行切片划分。
b = np.array([
[1,2,3,4],
[5,6,7,8],
[9,10,11,12]
])
print("b[:2]:", b[:2]) #第一个维度 前2
b[:2]: [[1 2 3 4] [5 6 7 8]]
print("b[:2, :3]:", b[:2, :3]) #第一个维度 前2, 第二个维度 前3
b[:2, :3]: [[1 2 3] [5 6 7]]
print("b[1:3, -2:]:", b[1:3, -2:])
b[1:3, -2:]: [[ 7 8] [11 12]] #第一个维度 2,3, 第二个维度 后2
print(a[a>7]) # 元素值为条件
[ 8 9 10 11 12]
condition = a > 7 # a>7 是逻辑array print(condition) [[False False False False] [False False False True] [ True True True True]]
print(a[condition]) [ 8 9 10 11 12]
where### 专用数据筛选函数 ,还能做筛选结果的替换工作
condition = a > 7 print(np.where(condition, -1, a))#满足条件的,都改成 -1,不满足的,都还是 a 里面的数字 [[ 1 2 3 4] [ 5 6 7 -1] [-1 -1 -1 -1]] ```