1、过滤数组
从现有数组中 根据条件选取部分元素并创建新数组,称为 过滤(Filtering)。
在 NumPy 中,通常使用 布尔索引(Boolean Indexing) 来实现过滤。
布尔索引的核心思想是:
使用一个 True / False 数组 来选择原数组中的元素。
规则如下:
True→ 该元素被保留False→ 该元素被过滤掉
示例:使用布尔列表过滤数组
import numpy as np
arr=np.array([41, 42, 43, 44])
x= [True, False, True, False]
newarr=arr[x]
print(newarr)输出:
[41 43]
说明:
| 原数组索引 | 值 | 过滤条件 |
|---|---|---|
| 0 | 41 | True |
| 1 | 42 | False |
| 2 | 43 | True |
| 3 | 44 | False |
因此新数组只包含:
[41, 43]
2、定义过滤器数组
在实际应用中,通常不会手动写 True / False,
而是 根据条件生成过滤器数组。
下面通过循环创建过滤条件。
示例:过滤大于 42 的元素
import numpy as np
arr=np.array([41, 42, 43, 44])
filter_arr= []
# 遍历数组
forelementinarr:
ifelement>42:
filter_arr.append(True)
else:
filter_arr.append(False)
newarr=arr[filter_arr]
print(filter_arr)
print(newarr)输出:
[False, False, True, True][43 44]
示例:过滤偶数
import numpy as np
arr=np.array([1, 2, 3, 4, 5, 6, 7])
filter_arr= []
forelementinarr:
ifelement%2==0:
filter_arr.append(True)
else:
filter_arr.append(False)
newarr=arr[filter_arr]
print(filter_arr)
print(newarr)输出:
[False, True, False, True, False, True, False][2 4 6]
3、直接从数组生成过滤器(推荐方法)
在 NumPy 中,更推荐 直接使用数组条件表达式生成布尔数组,
这种方式称为 向量化操作(Vectorized Operation)。
优点:
- 代码更简洁
- 运行速度更快
- 符合 NumPy 使用习惯
示例:过滤大于 42 的元素
import numpy as np arr=np.array([41, 42, 43, 44]) filter_arr=arr>42 newarr=arr[filter_arr] print(filter_arr) print(newarr)
输出:
[False False True True][43 44]
示例:过滤偶数
import numpy as np arr=np.array([1, 2, 3, 4, 5, 6, 7]) filter_arr=arr%2==0 newarr=arr[filter_arr] print(filter_arr) print(newarr)
输出:
[False True False True False True False][2 4 6]
4、多条件过滤(常见操作)
NumPy 允许使用 逻辑运算符 组合多个条件。
常用逻辑运算:
| 运算符 | 含义 |
|---|---|
& | 与(AND) |
| | 或(OR) |
~ | 非(NOT) |
⚠️ 注意:
必须使用 括号。
示例:过滤 40 到 45 之间的数
import numpy as np arr=np.array([38, 40, 42, 44, 46]) filter_arr= (arr>=40) & (arr<=45) print(arr[filter_arr])
输出:
[40 42 44]
5、使用 np.where() 过滤数组
NumPy 还提供了 where() 函数用于条件筛选。
示例
import numpy as np arr=np.array([10, 20, 30, 40]) result=np.where(arr>20) print(result)
输出:
(array([2, 3]),)
说明:
返回满足条件元素的 索引位置。
6、结合 where 获取元素
arr=np.array([10, 20, 30, 40]) print(arr[np.where(arr>20)])
输出:
[30 40]