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

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

本文详细解析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 相关产品和应用

全部下载

专题列表