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

使用numpy按固定delta对非规则数字列表采样的更简便方法

Numpy 实现方案

直接上可运行代码:

import numpy as np

X = np.array([1, 4, 5, 6, 11, 13, 15, 20, 21, 22, 25, 30])
delta = 5

# 定义采样规则函数
def sample_rule(current_val, last_selected):
    return current_val if current_val - last_selected >= delta else last_selected

# 转为numpy通用函数并做累积计算
ufunc = np.frompyfunc(sample_rule, 2, 1)
calc_result = ufunc.accumulate(X, dtype=np.object_).astype(X.dtype)
# 提取采样点(结果跳变的位置就是符合规则的采样点)
samples = X[np.diff(calc_result, prepend=calc_result[0]-1) != 0]

# 如果需要输出Python原生列表,加一行即可:
# samples = samples.tolist()

运行后得到的samples和你给出的原生Python实现结果完全一致:[1, 6, 11, 20, 25, 30]。

逻辑说明

  • 首先自定义符合「相邻差值≥delta」规则的判断函数,将其转为numpy支持累积操作的通用函数
  • 用accumulate方法对整个X序列做逐元素累积判断,得到每一步应该保留的采样值
  • 结果序列中值发生跳变的位置,就是符合规则的采样点位置,直接提取对应X的元素即可

优势

这套实现是numpy向量化运算逻辑,当X的长度达到万级以上时,运行效率比原生Python循环有明显的数量级提升。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:27:02