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

如何在DolphinDB中高效实现等间隔滑动窗口并行计算?

DolphinDB等间隔滑动窗口计算的高效实现方法

针对你提出的等间隔分组滑动窗口计算需求,手动提取分组的方式在间隔较大时确实存在代码冗余、效率低下的问题,以下是两种更高效的实现方案,支持并行计算且无需手动重组结果:

方案一:基于向量的自动分组并行计算

利用arraySplit自动按间隔拆分向量,结合each并行执行滑动窗口函数,最后通过flatten还原为原顺序的结果向量:

data = 1..30
interval = 3  # 分组间隔数,即分成3组
windowSize = 10

# 按间隔拆分向量为数组向量
groupedData = arraySplit(data, interval)
# 并行对每个分组执行滑动窗口求和
groupedResult = each(msum{, windowSize, 1}, groupedData)
# 展平结果为原顺序的向量
result = flatten(groupedResult)

说明:

  • arraySplit(data, interval)会将向量按指定间隔均匀拆分,比如interval=3时,生成[[1,4,7,...,28], [2,5,8,...,29], [3,6,9,...,30]]形式的数组向量
  • each函数默认以并行方式对数组中的每个子向量执行指定计算,大幅提升大数据量下的处理效率
  • flatten会将分组计算结果按原数据顺序拼接,直接得到与原向量结构匹配的结果

方案二:基于数据表的分组计算(适合结构化数据场景)

如果数据存储在数据表中,可以通过rowNumber()的模运算分组,结合context by实现分组滑动窗口计算:

data = 1..30
interval = 3
windowSize = 10

# 将向量转为数据表
t = table(data as val)
# 添加行号列用于分组
t[, rowNo] = rowNumber(t)
# 按行号模间隔分组,执行滑动窗口求和
resultT = select msum(val, windowSize, 1) as sumVal from t context by rowNo % interval

说明:

  • rowNo % interval会生成0、1、2循环的分组标识,自动将行号1、4、7...归为一组,2、5、8...归为另一组
  • context by子句会按分组标识对数据分组计算,结果自动保留原数据的顺序

这两种方法都无需手动创建多个分组变量,无论间隔多大都能自动适配,且天然支持并行计算,处理效率远高于手动拆分的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 23:15:58