【发布时间】:2017-06-28 12:51:07
【问题描述】:
我正在尝试计算矩阵多列的移动平均值。在阅读了关于 stackoverflow 的一些答案后,即this one,似乎filter 函数是要走的路。但是,它不会忽略NaN 元素,我想本着函数nanmean 的精神忽略NaN 元素。下面是一个示例代码:
X = rand(100,100); %generate sample matrix
X(sort(randi([1 100],1,10)),sort(randi([1 100],1,10))) = NaN; %put some random NaNs
windowlenght = 7;
MeanMA = filter(ones(1, windowlenght) / windowlenght, 1, X);
【问题讨论】:
-
为了清楚起见,您希望将 NaN 保持在各自的位置,并且仅出于每个均值的目的而忽略它们,而不是完全删除它们并取结果的滚动平均值?
-
没错。因此,如果连续有 7 个 NaN,则结果平均值应为 NaN。如果存在序列 [NaN NaN NaN NaN NaN 5 10],则结果平均值应为 7.5。
-
我认为你不能使用过滤器,并且可能需要循环思考这个。由于 FFT 的特性,您可以使用过滤器,但 NaN 没有数学公式
-
整个目标是避免使用效率低下的循环,因为我需要为几个大型矩阵计算它。我正在尝试 accumarray,但还没有弄清楚该怎么做。
-
函数movmean有一个nan标志。
标签: matlab nan moving-average