필터 지우기
필터 지우기

How to find last and first column of matrix which is not NaN?

조회 수: 6 (최근 30일)
Kaia
Kaia 2012년 9월 18일
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

답변 (3개)

José-Luis
José-Luis 2012년 9월 18일
편집: José-Luis 2012년 9월 18일
Index to first column:
idx_first = find(sum(~isnan(your_data),1) > 0, 1 ,'first')
Index to the last column:
idx_last = find(sum(~isnan(your_data),1) > 0, 1 , 'last')
  댓글 수: 2
Kaia
Kaia 2012년 9월 18일
I tried it, but i`m getting this error:
Error using find Second argument must be a positive scalar integer.
José-Luis
José-Luis 2012년 9월 18일
My bad, I forgot a 1 in there. See my edited answer.

댓글을 달려면 로그인하십시오.


Andrei Bobrov
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
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 CenterFile Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by