numpy之条件筛选

筛选用错了,后果很严重!

特定值筛选

1
2
3
4
5
6
7
8
9
10
import numpy as np

# 当数组是一维数组时,返回的值是一维的索引,所以只有一组索引数组
arr = np.array([2, 1, 1, 134, 45, 3, 546, 1])
print(np.where(arr == 3)) # 索引,注意返回的是元组,里面有一个元素
print(arr[np.where(arr == 3)]) # 值
# 当数组是二维数组时,满足条件的数组值返回的是值的位置索引,因此会有两组索引数组来表示值的位置,返回的第一个array表示行坐标,第二个array表示纵坐标,两者一一对应
arr = np.array([[2, 1, 1, 134], [45, 3, 546, 1]])
print(np.where(arr == 1)) # 索引,注意返回的是元组,里面有两个元素
print(arr[np.where(arr == 1)]) # 值

输出

1
2
3
4
(array([5]),)
[3]
(array([0, 0, 0]), array([0, 1, 2]))
[1 1 1]

Notes:

  • np.where返回的是元组
  • 元组元素数与筛选的数组维度相关

多个固定值筛选

1
2
3
4
5
6
import numpy as np


arr = np.array([1, 1, 1, 134, 45, 3, 546, 1, 2])
print(np.where((arr == 3) | (arr == 1)))
print(arr[np.where((arr == 3) | (arr == 1))])

范围筛选

1
2
3
4
5
import numpy as np

arr = np.array([1, 1, 1, 134, 45, 3, 546, 1, 2])
print(np.where(arr > 3))
print(arr[np.where(arr > 3)])

如果不需要index,还可以有更快的方法

1
2
3
4
import numpy as np

arr = np.array([1, 1, 1, 134, 45, 3, 546, 1, 2])
print(arr[arr > 3])

多范围筛选

1
2
3
4
import numpy as np

arr = np.array([1, 1, 1, 134, 45, 3, 546, 1, 2])
print(arr[(arr > 1]) & (arr < 200)]
------ 本文结束------
赞赏此文?求鼓励,求支持!
0%