在海量的数据中,你如何挑选出符合你要求的数据呢?Numpy 这时候就来拯救你了。不管是批量划分,还是按条件筛选,都能做到。
单个选取
import numpy as npa = np.array([1, 2, 3])print("a[0]:", a[0]) #选择单个print("a[1]:", a[1])a[0]: 1a[1]: 2print("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到2a[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]) #第一个维度 前2b[:2]: [[1 2 3 4] [5 6 7 8]]print("b[:2, :3]:", b[:2, :3]) #第一个维度 前2, 第二个维度 前3b[: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]] ```
