Octave 在倍频程中执行矢量化指数移动平均
在GNU倍频程中,希望计算向量的n天指数移动平均值,而不使用for循环Octave 在倍频程中执行矢量化指数移动平均,octave,time-series,vectorization,moving-average,Octave,Time Series,Vectorization,Moving Average,在GNU倍频程中,希望计算向量的n天指数移动平均值,而不使用for循环 我可以用for循环来实现这一点,但效率很低。我想使用filter函数,但我不确定如何使其正常工作。将此线程的位拼接在一起后 我使用Octave的过滤函数构建了这个函数 function meanV = movingEMean(V, window) simpleAvg = mean(V(1:window)); alpha = 1/window; X = V(window:end); X(1) = simple
我可以用for循环来实现这一点,但效率很低。我想使用filter函数,但我不确定如何使其正常工作。将此线程的位拼接在一起后 我使用Octave的过滤函数构建了这个函数
function meanV = movingEMean(V, window)
simpleAvg = mean(V(1:window));
alpha = 1/window;
X = V(window:end);
X(1) = simpleAvg;
meanV = filter(alpha, [1 alpha-1], X, simpleAvg*(1-alpha));
end
它以简单的移动平均线为基础V
是计算指数移动平均数的数字列向量<代码>窗口是以天数表示的整数。我用了12个
下面是这个函数的数学解释
function meanV = movingEMean(V, window)
simpleAvg = mean(V(1:window));
alpha = 1/window;
X = V(window:end);
X(1) = simpleAvg;
meanV = filter(alpha, [1 alpha-1], X, simpleAvg*(1-alpha));
end
请注意,页面使用2/(n+1)
(其中n
是window
或天数)作为alpha
,但我使用1/n
,因为alpha
的值适合我的需要。根据需要调整alpha
或者,我有时需要输入和输出向量的维度来匹配。我通过添加
meanV=[NaN(窗口-1,1);meanV],用NaN
填充无效值代码>作为movingEMean
函数中的最后一行。如果需要粗略估计,也可以使用simpleAvg
填充它。将此线程中的位拼接在一起后
我使用Octave的过滤函数构建了这个函数
function meanV = movingEMean(V, window)
simpleAvg = mean(V(1:window));
alpha = 1/window;
X = V(window:end);
X(1) = simpleAvg;
meanV = filter(alpha, [1 alpha-1], X, simpleAvg*(1-alpha));
end
它以简单的移动平均线为基础V
是计算指数移动平均数的数字列向量<代码>窗口
是以天数表示的整数。我用了12个
下面是这个函数的数学解释
function meanV = movingEMean(V, window)
simpleAvg = mean(V(1:window));
alpha = 1/window;
X = V(window:end);
X(1) = simpleAvg;
meanV = filter(alpha, [1 alpha-1], X, simpleAvg*(1-alpha));
end
请注意,页面使用2/(n+1)
(其中n
是window
或天数)作为alpha
,但我使用1/n
,因为alpha
的值适合我的需要。根据需要调整alpha
或者,我有时需要输入和输出向量的维度来匹配。我通过添加meanV=[NaN(窗口-1,1);meanV],用NaN
填充无效值代码>作为movingEMean
函数中的最后一行。如果需要粗略估计,还可以用simpleAvg
填充它