indexing with isnan in multidimensional arrays
15 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Sagar Parajuli
am 12 Aug. 2021
Kommentiert: Walter Roberson
am 13 Aug. 2021
I have this code:
load lon_nonan_reshape_use;
idx = ~isnan(lon_nonan_reshape_use);
lon_nonan_adj = lon_nonan_reshape_use(idx);
In the above example, lon_nonan_reshape_use and idx both are of size n*2 so I expect lon_nonan_adj also to be of n*2. MATLAB gives the results in n*1 dimension because lon_nonan_adj(:, 1) is not equal to lon_nonan_adj(:, 2) which is sensible. But I still want to get lon_nonan_adj as a n*2 matrix with NaNs retained in the place where there were NaNs previously. Could you please help?
4 Kommentare
DGM
am 12 Aug. 2021
"But I still want to get lon_nonan_adj as a n*2 matrix with NaNs retained in the place where there were NaNs previously."
If you take matrix A, remove all the NaNs and then fill all the empty spots left over with NaN such that the size is preserved, then you're back at A. I don't see how the operation isn't superfluous.
Akzeptierte Antwort
Walter Roberson
am 12 Aug. 2021
load lon_nonan_reshape_use;
idx = ~all(isnan(lon_nonan_reshape_use),2);
lon_nonan_adj = lon_nonan_reshape_use(idx,:);
This retains rows provided there is at least one non-nan in the row.
1 Kommentar
Walter Roberson
am 13 Aug. 2021
If you want to remove all rows with NaN anywhere in the row, then
rmmissing(lon_nonan_reshape_use)
Weitere Antworten (1)
Chunru
am 12 Aug. 2021
% A small matrix with nans
a=randn(6, 3);
a([2 11 13])=nan
% idx
idx = ~isnan(a)
a(idx)
So a(idx) is a colum matrix based on the original a by removing all nans and arranged in a column vector.
If you want to remove all rows with nans (it looks so for your problem), then you can do the following
idx1 = all(~isnan(a), 2)
a(idx1, :)
Siehe auch
Kategorien
Mehr zu Matrices and Arrays finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!