Movmean skipping NaN in array

10 ビュー (過去 30 日間)
sr9497
sr9497 2022 年 3 月 27 日
コメント済み: sr9497 2022 年 3 月 28 日
I have an array
x = [20 10 5 NaN]; %and I now use:
movmean([x; x(1, :)], [0 1], 1, 'omitnan', 'Endpoints', 'discard')
ans = 1×4
20 10 5 NaN
to calculate the mean, [15 7.5 5 20].
I would like to get [15 7.5 12.5 NaN] so skip over NaN and calculate the mean of 20 and 5 as well, instead of having NaN being replaced by 20 after using movmean. What is the best way to do this?
  2 件のコメント
Adam Danz
Adam Danz 2022 年 3 月 27 日
I think you meant to transpose x. It needs to be a column vector in your example.
Adam Danz
Adam Danz 2022 年 3 月 27 日
> I would like to get [15 7.5 12.5 NaN]
Where does the last NaN come from?
What would be the expected value for this: [10 20 NaN 5 NaN NaN 10 20] ?

サインインしてコメントする。

回答 (1 件)

Image Analyst
Image Analyst 2022 年 3 月 27 日
Not sure where the 12.5 is coming from but maybe you'd like this:
x = [20, 10, 5, NaN];
kernel = [1,1];
xs = x;
xs(isnan(x)) = 0;
theSum = conv(xs, kernel, 'same')
theSum = 1×4
30 15 5 0
theCount = conv(~isnan(x), kernel, 'same')
theCount = 1×4
2 2 1 0
output = theSum ./ theCount
output = 1×4
15.0000 7.5000 5.0000 NaN
  5 件のコメント
Image Analyst
Image Analyst 2022 年 3 月 28 日
So now I'm getting confused. Do you have a row vector, or a 2-D matrix? You've shown both.
sr9497
sr9497 2022 年 3 月 28 日
A 2-D matrix, the row vector was a mistake.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeCreating and Concatenating Matrices についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by