Last non nan observation
Show older comments
Hi,
I have a matrix and I want to find in each column the last non nan observation. Is there a neat way of doing it quickly? Regards
Accepted Answer
More Answers (1)
Sven
on 18 Feb 2012
Here I can plug a file exchange entry:
Im = rand(50);
Im(Im>.7) = nan;
lastNans = find_ndim(~isnan(Im),1,'last')
To quote: I = FIND_NDIM(BW,DIM,'last') returns the subscripts of the last nonzero elements of BW along the dimension DIM.
The solution hijacks the max() function... it's only a few lines but it packages up things nicely (such as returning 0 if no NaNs were found in a column) - hope you like it.
And if you don't want to use the function itself you can get your answer with just the relevant lines as follows:
BW = ~isnan(Im);
[~, foundPx] = max(BW,[],1);
foundPx = size(BW,1)+1 - foundPx; % Need to count backwards to get last non-zero
foundPx(~any(BW,dim)) = 0; % Account for all-zero entries by setting output to 0
Categories
Find more on Logical in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!