如何提取数组中被0分隔的≥5或≤-5连续序列的极值列表
解决方案
你已经生成的累加数组天然可以直接通过提取连续非0段的末尾值实现需求,因为每段连续非0序列的最后一个元素就是该段的总持续时长(正为高于阈值、负为低于阈值),使用numpy即可快速实现:
实现代码
import numpy as np # 此处aok为你已经生成的累加数组 padded = np.concatenate([[0], aok, [0]]) # 定位所有连续非0段的末尾索引 seg_end_pos = np.where((padded[:-1] != 0) & (padded[1:] == 0))[0] - 1 # 筛选出持续时长≥5天或≤-5天的事件 result = aok[seg_end_pos][np.abs(aok[seg_end_pos]) >= 5].tolist()
结果验证
用你给出的样例数组运行上述代码,result的输出即为你需要的[-25, 6, 7]。
如果需要统计事件总数,直接取len(result)即可;区分正负事件的话可以进一步对结果做正负筛选统计。
内容的提问来源于stack exchange,提问作者spokati
相关产品推荐
相关产品推荐

