滑动窗口系列(m 系列)

对窗口内聚合计算,DolphinDB引入了 m 系列函数。m 系列函数对数据内的每个元素进行一次窗口计算,返回一个和原数据等长的结果。

m 系列函数介绍:

  • m 系列函数对应的高阶函数 moving

$ moving(func, funcArgs, window, [minPeriods])

注意:m 系列函数为各自的计算场景进行了优化,因此比 moving 高阶函数有更好的性能。

  • 内置的 m 系列函数的通用参数模板如下:

$ mfunc(X, window, [minPeriods])
$ mfunc(X, Y, window, [minPeriods])

参数

X (Y) 是一个向量/矩阵/表。

New in version 1.30.14: 参数 window 支持 DURATION 类型

window 是大于等于 2 的正整型或 DURATION 标量。表示滑动窗口的长度。

注意:在流计算引擎中调用滑动窗口函数时,window 的上限为 102400。

minPeriods 是一个正整数。为滑动窗口中最少包含的观测值数据。


  • 根据 window 的取值,可以分为两类:

  1. window 是正整数或 DURATION 类型


  1. window 是正整数


窗口确定规则:

m 系列函数,支持一个向前的窗口,即基于数据中的每个元素,向前选取 window 指定范围的窗口。

(1) 当 X 是普通向量/矩阵/表时,表示以窗口内元素个数衡量的滑动窗口的长度。

(注意:对于表只有布尔类型和数值型的列参与计算)

../../_images/mfunc_1.png

m 系列函数(mrank, mcount 除外)提供了 minPeriods 参数,用于约束窗口的观测值。

对于计算结果:

  1. 如果没有指定 minPeriods,前(window - 1)个元素为 NULL;

  2. 如果指定了 minPeriods,前(minPeriods - 1)个元素为 NULL。

上图的对应代码,这里以 msum 为例:

$ X = 2 1 3 7 6 5 4 9 8 10
$ msum(X, 3);
[ , , 6, 11, 16, 18, 15, 18, 21, 27]

(2) 当 X 是索引序列或者索引矩阵时,表示以时间衡量的滑动窗口的长度。若此时 window 是一个正整数,则默认将其视作和 X 中索引单位一致的量。

其滑动规则如下图:

../../_images/mfunc_2.png

上图的对应代码,这里以 msum 为例:

$ T = [2022.01.01, 2022.01.02, 2022.01.03, 2022.01.06, 2022.01.07, 2022.01.08, 2022.01.10, 2022.01.11]
$ X = 1..8
$ X1 = indexedSeries(T, X)
$ msum(X1, window=3d);

label

col0

2022.01.01

1

2022.01.02

3

2022.01.03

6

2022.01.06

4

2022.01.07

9

2022.01.08

15

2022.01.10

13

2022.01.11

15