You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻找累积计数急剧增长的x值起止位置的技术实现问题

定位累积计数急剧增长的区间(兼容短暂停顿)

EDIT: 补充了更多数据。

x = [0, 5, 6,15, 20, 40, 73,
     100,101,102,103,104,105,106,108,111,115,
     116,117,118,119,120,123,124,125,126,127,
     128,129,130,131, 150,161,170, 183, 194,
     210, 234, 257, 271,272,273,274, 275,276,
     277,278,279,280,281,282,283,284,285,287,
     288,291,292,293,294,295,296,297,298,300,301,
     302,303,304,305,306,307,308,309,310,311,
     340, 351, 358, 360, 380, 390, 400,401,
     402,403, 404, 405, 408, 409, 413, 420,
     425,426,427,428,429,430,431,432,433,434,435,
     436, 440, 450, 455]

y = np.arange(1, len(x)+1)

数据可视化后能看到多段累积计数急剧增长的区间,其中最后一段增长存在短暂停顿,但需要将其视为单一区间。

需求:定位每段累积计数急剧增长对应的x值起止索引,要求采用向量化方法提升处理效率。

此前基于Pandas的方法步骤繁琐且性能不佳,步骤如下:

  • 偏移x数据并计算差值
  • 判断连续差值是否低于阈值生成逻辑数组
  • 对逻辑数组做滚动求和
  • 定位滚动求和超过阈值的位置
  • 对比前值确定起止时间
  • 将时间加入索引列表

Riley提供了简洁的初始实现代码:

rate_threshold = 0.25 
min_consecutive = 8 
above_rate = np.gradient(y,x) >= rate_threshold
sequence_diff = np.diff(np.lib.stride_tricks.sliding_window_view(above_rate, window_shape=min_consecutive).all(axis=1).astype(int))
intervals = np.hstack([np.argwhere(sequence_diff==1) + 1, np.argwhere(sequence_diff==-1) + min_consecutive-1])

但该代码会将最后一段急剧增长区间拆分为两段,不符合需求。

考虑在滑动窗口中加入平均处理,以兼容梯度短暂下降的情况,避免区间被错误拆分。

内容的提问来源于stack exchange,提问作者Mitch Anthony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 10:45:37