How can I replace NaN elements with the nearest value in the same column?

I am trying to replace NaN's in a vector field with the nearest value.
% I have:
M=
NaN 12
18 14
NaN NaN
NaN NaN
NaN 16
12 NaN
12 NaN
NaN 12
16 NaN
%I desire:
M=
18 12
18 14
12 16
12 16
12 16
12 12
12 12
16 12
16 12
Any information will be helpful. Thank you

2 件のコメント

AstroGuy1984
AstroGuy1984 2017 年 4 月 25 日
編集済み: AstroGuy1984 2017 年 4 月 25 日
What do you mean by "nearest"? Do you mean "next good value"? Because that's what you appear to desire. For example the second NaN in column 1 is closer to 18 than 12.
sal135
sal135 2017 年 4 月 26 日
I would like to have the first value of NaN to have the value of the next good value. However if the last value in the column is a NaN I would like for it to have the value of the previous good value

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

 採用された回答

Andrei Bobrov
Andrei Bobrov 2017 年 4 月 25 日
編集済み: Andrei Bobrov 2017 年 4 月 26 日
FIXED 2
m = flipud(M)
t = ~isnan(m);
ii = cumsum(t);
ii(ii == 0) = 1;
ii = bsxfun(@plus,[0,ii(end,1:end-1)],ii);
m1 = m(t);
out = flipud(m1(ii))

6 件のコメント

sal135
sal135 2017 年 4 月 26 日
I keep getting an error of: Undefined function 'flip' for input arguments of type 'double'.
Andrei Bobrov
Andrei Bobrov 2017 年 4 月 26 日
You are using an older version of MATLAB. Fixed for you.
sal135
sal135 2017 年 4 月 26 日
Yeah I just realized that. However now I get Error using + Matrix dimensions must agree.
Andrei Bobrov
Andrei Bobrov 2017 年 4 月 26 日
Op! Clear. Fixed.
Andrei Bobrov
Andrei Bobrov 2017 年 4 月 26 日
>> m = flipud(M);
t = ~isnan(m);
ii = cumsum(t);
ii(ii == 0) = 1;
ii = bsxfun(@plus,[0,ii(end,1:end-1)],ii);
m1 = m(t);
out = flipud(m1(ii))
out =
18 12
18 14
12 16
12 16
12 16
12 12
12 12
16 12
16 12
>>
sal135
sal135 2017 年 4 月 26 日
編集済み: sal135 2017 年 4 月 27 日
Thank you for your help! This worked out great.

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

カテゴリ

タグ

質問済み:

2017 年 4 月 25 日

編集済み:

2017 年 4 月 27 日

Community Treasure Hunt

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

Start Hunting!

Translated by