滑动窗口系列(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 的取值,可以分为两类:
window 是正整数或 DURATION 类型
See also
单目:
msum, msum2, mavg, mprod, mmax, mmin, mmed,
mfirst, mlast, mrank, mcount, mpercentile, mstd,
mstdp, mvar, mvarp, mkurtosis, mskew, mifirstNot, milastNot.
双目:
window 是正整数
窗口确定规则:
m 系列函数,支持一个向前的窗口,即基于数据中的每个元素,向前选取 window 指定范围的窗口。
(1) 当 X 是普通向量/矩阵/表时,表示以窗口内元素个数衡量的滑动窗口的长度。
(注意:对于表只有布尔类型和数值型的列参与计算)
m 系列函数(mrank, mcount 除外)提供了 minPeriods 参数,用于约束窗口的观测值。
对于计算结果:
如果没有指定 minPeriods,前(window - 1)个元素为 NULL;
如果指定了 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 中索引单位一致的量。
其滑动规则如下图:
上图的对应代码,这里以 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 |