How to find closest values within a matirx

3 views (last 30 days)
A
A on 29 Apr 2022
Commented: A on 30 Apr 2022
Hi have a matirx
[NAN NAN NAN 7 8 9;
NAN NAN 5 7 8 7;
4 8 6 8 3 4;
4 7 0 1 1 4]
How do I replace the NAN values with the closest values known values. So the matirx will kind of look like
[4 5 7 7 8 9;
4 8 5 7 8 7;
4 8 6 8 3 4;
4 7 0 1 1 4]
  4 Comments
A
A on 29 Apr 2022
Yea it kinda like that logic, like nearest neighbors almost. Becasue for (2,2) the values is close is (3,2) rather than (2,3)

Sign in to comment.

Accepted Answer

Matt J
Matt J on 29 Apr 2022
A=[nan(1,3) 7 8 9;
nan(1,2) 5 7 8 7;
4 8 6 8 3 4;
4 7 0 1 1 4]
A = 4×6
NaN NaN NaN 7 8 9 NaN NaN 5 7 8 7 4 8 6 8 3 4 4 7 0 1 1 4
nanmap=isnan(A);
[~,idx]=bwdist(~nanmap);
A(nanmap)=A(idx(nanmap))
A = 4×6
4 5 5 7 8 9 4 8 5 7 8 7 4 8 6 8 3 4 4 7 0 1 1 4

More Answers (1)

DGM
DGM on 29 Apr 2022
Edited: DGM on 29 Apr 2022
I'm not really sure what you mean by "closest values". Maybe you're talking about inpainting?
A = [NaN NaN NaN 7 8 9;
NaN NaN 5 7 8 7;
4 8 6 8 3 4;
4 7 0 1 1 4]
A = 4×6
NaN NaN NaN 7 8 9 NaN NaN 5 7 8 7 4 8 6 8 3 4 4 7 0 1 1 4
B = regionfill(A,isnan(A))
B = 4×6
5.4778 5.8000 5.9333 7.0000 8.0000 9.0000 5.1556 5.9889 5.0000 7.0000 8.0000 7.0000 4.0000 8.0000 6.0000 8.0000 3.0000 4.0000 4.0000 7.0000 0 1.0000 1.0000 4.0000
If you don't have regionfill() (Image Processing Toolbox), you can always use John's inpaint_nans() on the File Exchange
C = inpaint_nans(A)
You might also be able to use fillmissing() depending on the directional behavior you intend.
  2 Comments
DGM
DGM on 29 Apr 2022
Then Matt's answer might be more what you want

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!