在海量的数据中,你如何挑选出符合你要求的数据呢?Numpy 这时候就来拯救你了。不管是批量划分,还是按条件筛选,都能做到。

单个选取

  1. import numpy as np
  2. a = np.array([1, 2, 3])
  3. print("a[0]:", a[0]) #选择单个
  4. print("a[1]:", a[1])
  5. a[0]: 1
  6. a[1]: 2
  7. print("a[[0,1]]:\n", a[[0,1]]) #一次性选择多个
  8. print("a[[1,1,0]]:\n", a[[1,1,0]])
  9. a[[0,1]]:
  10. [1 2]
  11. a[[1,1,0]]:
  12. [2 2 1]
  13. ######## 2 维 ######
  14. b = np.array([
  15. [1,2,3,4],
  16. [5,6,7,8],
  17. [9,10,11,12]
  18. ])
  19. # 选第 2 行所有数
  20. print("b[1]:", b[1])
  21. b[1]: [5 6 7 8]
  22. # 选第 2 行,第 1 列的数
  23. print("b[1,0]:", b[1,0])
  24. b[1,0]: 5
  25. # 这个看着有点纠结,如果对应到数据,
  26. # 第一个拿的是数据位是 [1,2]
  27. # 第二个拿的是 [0,3]
  28. print("b[[1,0],[2,3]]:", b[[1,0],[2,3]])
  29. b[[1,0],[2,3]]: [7 4]

我们可以在其不同维度上挑选那个维度上对应序号上的数值。而且还能一次从原数据上选取多个数据点。

切片划分

上面已经介绍到了一个个拎出来数据的方式,基本上可以总结成,索引到具体的数上,就能拎出这个数具体的值。而有时候你会不会觉得特别麻烦, 如果我要在 100 个数中,从第一个一直找到第 50 个。我要写成这样 a[1,2,3,4….50],这样太累赘了。Numpy 也考虑得非常周全,它有一个更取巧的方式。

  1. a = np.array([1, 2, 3, 4])
  2. print("a[0:2]:", a[0:2]) # 从1到2
  3. a[0:2]: [1 2]
  4. print("a[1:]:", a[1:]) # 从2到最后
  5. a[1:]: [2 3 4]
  6. print("a[-2:]:", a[-2:]) # 从倒数第2 到 最后
  7. a[-2:]: [3 4]
  8. ### 在多维上,也可以进行切片划分。
  9. b = np.array([
  10. [1,2,3,4],
  11. [5,6,7,8],
  12. [9,10,11,12]
  13. ])
  14. print("b[:2]:", b[:2]) #第一个维度 前2
  15. b[:2]: [[1 2 3 4] [5 6 7 8]]
  16. print("b[:2, :3]:", b[:2, :3]) #第一个维度 前2, 第二个维度 前3
  17. b[:2, :3]: [[1 2 3] [5 6 7]]
  18. print("b[1:3, -2:]:", b[1:3, -2:])
  19. b[1:3, -2:]: [[ 7 8] [11 12]] #第一个维度 2,3, 第二个维度 后2

  • 条件筛选

    选择那些在数值上符合条件的数据 ```python a = np.array([ [1,2,3,4], [5,6,7,8], [9,10,11,12] ])

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]] ```