NumPy ndarray 按条件筛选与关联索引详解

周末不加班
周末不加班
发布时间:2026-10-13| 4人浏览过
原创

本文详细解析NumPy中ndarray的条件筛选方法,涵盖按固定值、多值及范围筛选。重点阐述np.where函数在获取索引及多数组关联筛选中的应用,对比直接布尔索引的性能差异,提供实用的代码示例与操作指南。

在近期的数据处理项目中,对NumPy数组(ndarray)的操作极为频繁。针对如何高效地从数组中提取符合特定条件的子集及其位置信息,本文总结了几种核心筛选策略。

基于固定数值的筛选

一、基于固定数值的筛选

示例代码演示了如何从ndarray中找出数值等于3的元素,并返回这些元素在原数组中的索引位置。


import numpy as np

arr = np.array([1, 1, 1, 134, 45, 3, 46, 45, 65, 3, 23424, 234, 12, 12, 3, 546, 1, 2])
print(np.where(arr==3))
print(arr[np.where(arr == 3)])

Output:

(array([ 5, 9, 14], dtype=int32),)
[3 3 3]

基于多个固定值的筛选

二、基于多个固定值的筛选

上述方法同样适用于筛选多个特定的固定值。只需将不同的条件表达式用括号包裹,并使用竖线符号“|”连接即可实现逻辑或运算。


import numpy as np

arr = np.array([1, 1, 1, 134, 45, 3, 46, 45, 65, 3, 23424, 234, 12, 12, 3, 546, 1, 2])
print(np.where((arr == 3) | (arr == 1)))
print(arr[np.where((arr == 3) | (arr == 1))])

Output:

(array([ 0, 1, 2, 5, 9, 14, 16], dtype=int32),)
[1 1 1 3 3 3 1]

基于数值范围的筛选

三、基于数值范围的筛选

除了匹配特定值,我们通常还需要根据一定的数值范围进行筛选。


import numpy as np

arr = np.array([1, 1, 1, 134, 45, 3, 46, 45, 65, 3, 23424, 234, 12, 12, 3, 546, 1, 2])
print(np.where(arr > 3))
print(arr[np.where(arr > 3)])

Output:

(array([ 3, 4, 6, 7, 8, 10, 11, 12, 13, 15], dtype=int32),)
[ 134  45  46  45  65 23424  234  12  12  546]

若仅需获取筛选后的数据而无需索引信息,存在更高效的替代方案。


import numpy as np

arr = np.array([1, 1, 1, 134, 45, 3, 46, 45, 65, 3, 23424, 234, 12, 12, 3, 546, 1, 2])
print(arr[arr > 3])

Output:

[ 134  45  46  45  65 23424  234  12  12  546]

多数组关联筛选与索引应用

那么为何仍需使用np.where?关键在于索引功能。当需要在两个或多个数组间建立关联筛选时(例如,筛选出数组a中值为0时对应的数组b的元素),np.where函数提供了必要的索引支持。


import numpy as np

a = np.array([0, 0, 1, 1, 0, 1, 1, 0, 1])
b = np.arange(len(a))
print(a)
print(b)
print(b[np.where(a == 0)])

Output:

[0 0 1 1 0 1 1 0 1]
[0 1 2 3 4 5 6 7 8]
[0 1 4 7]

以上关于NumPy ndarray按条件筛选及关联筛选的示例分享完毕,希望能为读者提供有价值的参考。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。