如何不使用for循环求numpy数组中小于阈值0.5的最长连续元素个数
Numpy无for循环实现统计连续小于0.5元素的最大个数
我们可以完全基于numpy向量化操作实现需求,全程不需要写显式for循环:
完整实现代码
import numpy as np # 构造输入数组 arr = np.array([0.66594665, 0.33003433, np.nan, 0.42567293, 0.48161913, 0.30000838, 0.13639367, 0.84300475, 0.19029748, np.nan]) # 1. 生成布尔掩码,标记小于0.5的元素,NaN参与比较默认返回False,刚好作为序列分隔点 mask = arr < 0.5 # 2. 对掩码的反转值做累加,给每一段连续的True/False分配唯一分组编号 groups = np.cumsum(~mask) # 3. 统计所有符合条件的分组的元素个数,取最大值即为结果,兼容无符合条件元素的极端场景 max_count = np.bincount(groups[mask]).max() if mask.any() else 0 print(max_count) # 输出结果为4,和示例预期一致
逻辑说明
- 布尔掩码
mask中,只有取值小于0.5的有效数值位置会被标记为True,大于等于0.5的数值、NaN都会被标记为False - 分组编号
groups每遇到一个False就会自增1,保证每一段连续的True都属于同一个分组 - 用
np.bincount统计每个有效分组的元素数量,最大值就是我们要的最长连续序列长度
内容的提问来源于stack exchange,提问作者user308827
相关产品推荐
相关产品推荐

