poster
2019-12-10, 20:41
我有一个矩阵,每列代表一段时间内的特征。我需要找到给定窗口大小的这些值的移动平均值。
有没有像一个功能一个 (http://www.mathworks.com/help/finance/tsmovavg.html)在MATLAB?
output = tsmovavg(vector, 's', lag, dim)
回答:
您可以使用FILTER (http://octave.sourceforge.net/octave/function/filter.html)功能。一个例子:
t = (0:.001:1)'; %#' vector = sin(2*pi*t) + 0.2*randn(size(t)); %# time series wndw = 10; %# sliding window size output1 = filter(ones(wndw,1)/wndw, 1, vector); %# moving average 甚至使用映像包中的IMFILTER (http://octave.sourceforge.net/image/function/imfilter.html)和FSPECIAL (http://octave.sourceforge.net/image/function/fspecial.html)
output2 = imfilter(vector, fspecial('average', [wndw 1])); 最后一种选择是使用索引编制(不建议用于非常大的向量)
%# get indices of each sliding window idx = bsxfun(@plus, (1:wndw)', 0:length(vector)-wndw); %'# compute average of each output3 = mean(vector(idx),1); 请注意填充的区别: output1(wndw:end)对应于output3
更多&回答... (https://stackoverflow.com/questions/3114450)
有没有像一个功能一个 (http://www.mathworks.com/help/finance/tsmovavg.html)在MATLAB?
output = tsmovavg(vector, 's', lag, dim)
回答:
您可以使用FILTER (http://octave.sourceforge.net/octave/function/filter.html)功能。一个例子:
t = (0:.001:1)'; %#' vector = sin(2*pi*t) + 0.2*randn(size(t)); %# time series wndw = 10; %# sliding window size output1 = filter(ones(wndw,1)/wndw, 1, vector); %# moving average 甚至使用映像包中的IMFILTER (http://octave.sourceforge.net/image/function/imfilter.html)和FSPECIAL (http://octave.sourceforge.net/image/function/fspecial.html)
output2 = imfilter(vector, fspecial('average', [wndw 1])); 最后一种选择是使用索引编制(不建议用于非常大的向量)
%# get indices of each sliding window idx = bsxfun(@plus, (1:wndw)', 0:length(vector)-wndw); %'# compute average of each output3 = mean(vector(idx),1); 请注意填充的区别: output1(wndw:end)对应于output3
更多&回答... (https://stackoverflow.com/questions/3114450)