如何快速统计两个numpy数组满足各自条件的共同索引数量?
快速统计numpy数组中同时满足条件的索引数量
要高效解决这个问题,直接利用numpy的向量化布尔操作即可,这是处理numpy数组最快的方式,完全避免Python循环的开销。
步骤如下:
- 分别生成两个布尔掩码:标记
arr1中大于10的元素、arr2中大于100的元素 - 对两个掩码执行逻辑与操作,得到同时满足两个条件的布尔数组
- 统计结果中
True的数量
代码示例
import numpy as np # 示例输入数组 arr1 = np.array([3, 11, 9, 15, 22, 7]) arr2 = np.array([80, 105, 120, 95, 130, 90]) # 生成布尔掩码 mask_arr1 = arr1 > 10 mask_arr2 = arr2 > 100 # 计算同时满足条件的索引数量 # 两种等价方式,np.count_nonzero在大数组上性能略优 count = np.count_nonzero(mask_arr1 & mask_arr2) # 或者 count = (mask_arr1 & mask_arr2).sum() print(count) # 输出:3
关键说明
- numpy的布尔操作是底层C实现的向量化运算,比Python循环快几个数量级,尤其适合处理大规模数组
- 确保两个输入数组形状一致(或满足numpy广播规则),否则会报错
np.count_nonzero()和.sum()都能统计True的数量,前者在处理超大数组时性能更稳定
内容的提问来源于stack exchange,提问作者Rezzy
相关产品推荐
相关产品推荐

