【问题标题】:How to compute centered moving average in an array:MATLAB如何计算数组中的居中移动平均线:MATLAB
【发布时间】:2020-06-07 05:11:16
【问题描述】:

我有一个 40x2 矩阵,其中第一列显示日期索引,第二列显示每一天的值:

1   11
2   12
3   10
4   10
5   12
6   11
7   12
8   10
9   12
10  10
11  12
12  12
13  10
14  9
15  12
16  12
17  12
18  11
19  10
20  10
21  11
22  11
23  10
24  8
25  9
26  9
27  9
28  8
29  8
30  12
31  11
32  9
33  9
34  12
35  11
36  11
37  10
38  10
39  11
40  9

如何计算以 15 日为中点的 30 天移动窗口的中心移动平均线,向后遍历 14 天,向前遍历 15 天?基本上我想计算:

Xavg = median[X(i-14):X(i+15)]. 

其中X(i) 是数据点。我发现了一些使用卷积运算符的线程,但由于我的中点位于第 15 天,因此无法找到如何修复步长以及如何计算中值效应?

【问题讨论】:

  • 中位数不是移动平均线。平均而言,您可以使用conv。对于中位数,@Dominic 的回答很好
  • 或者,你可以使用movmedian(或者是movmean?我现在很困惑)

标签: arrays matlab matrix signal-processing


【解决方案1】:

您可以使用arrayfun 以矢量化方式执行以下操作。

window_size = 15;

Xavg = arrayfun( @(i) median(X(i-window_size+1:i+window_size,2)), window_size:size(X,1)-window_size)

这只是将中值函数应用于i-14:i+15 的窗口 15:25 范围内的 i (整个窗口都适合)。

【讨论】:

  • 这里的X 是什么?
  • X 是 40x20 输入矩阵 - 我从问题中获取了符号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多