How to find last and first column of matrix which is not NaN?
13 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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 commentaires
Réponses (3)
Andrei Bobrov
le 18 Sep 2012
Modifié(e) : Andrei Bobrov
le 21 Sep 2012
A - your array with NaN;
t = ~isnan(A);
idx0 = [find(any(~t) & any(t)),find(all(t))];
idx = idx0([1,end]);
2 commentaires
Image Analyst
le 18 Sep 2012
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));
Voir également
Catégories
En savoir plus sur Creating and Concatenating Matrices dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!