NumPy(Numerical Python 的缩写)是一个开源的 Python 科学计算库。使用 NumPy,可以高效地处理 多维数组(ndarray),并提供大量用于 线性代数、傅里叶变换、随机数生成 等数值计算功能。在数据处理过程中,经常需要根据条件 筛选数组中的元素。在 NumPy 中,这种操作称为 数组过滤(Filtering)。本文主要介绍 NumPy 中使用布尔索引(Boolean Indexing)过滤数组的方法。

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]

说明:

原数组索引过滤条件
041True
142False
243True
344False

因此新数组只包含:

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

推荐文档