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]);
댓글 수: 2
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!