How to find last and first column of matrix which is not NaN?
8 次查看(过去 30 天)
显示 更早的评论
Hi there,
Lets say I have 24 columns with 8760 rows. In some of the first columns (in some cases 1-5 columns are all NaNs) and last columns (for example 21-24) are 8760 NaNs. Is there some quick way to find the number (index) of the first column(s) where are at least some values which are not NaNs (1 not a NaN is also suitable), and the last column where all the rows are not NaN.
Many thanks,
Kaia
0 个评论
回答(3 个)
Andrei Bobrov
2012-9-18
编辑:Andrei Bobrov
2012-9-21
A - your array with NaN;
t = ~isnan(A);
idx0 = [find(any(~t) & any(t)),find(all(t))];
idx = idx0([1,end]);
Image Analyst
2012-9-18
I think this handles all cases that you might care about:
%-------------------------------------------------
% Generate some sample data.
m = randi(9, [8760,24]);
% Make first 5 columns all NaNs
m(:, 1:5) = nan;
% Make column 7 have mostly NaNs but a few non-Nan values.
m(10:end, 7) = NaN;
% Make last 2 columns all NaNs
m(:, end-1:end) = nan;
%-------------------------------------------------
% Now we have our sample data and we can begin
% Find out where all the NaN's live.
% This is a 2D map of their locations.
nanMap = isnan(m);
% Find out which columns have no NaNs at all.
noNanRows = find(all(~nanMap));
% Find out which columns have all 8760 value = NaN.
allNanRows = find(all(nanMap));
% Find out which columns have NOT all 8760 values = NaN,
% in other words, columns that have at least some values that are not NaNs.
% This is, a mixture of NaN's and valid numerical values.
nansPerColumn = sum(nanMap);
someNanRows = find(nansPerColumn > 0 & nansPerColumn < size(m, 1));
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 NaNs 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!