How do I find the indices of NaN values in a cell array?
Afficher commentaires plus anciens
Hi, I have a 3390 x 1 cell array containing 4 x 30 doubles. Some of these doubles contain NaN values which I would like to replace by the preceding double. How do I detect the indices of the doubles containing 'NaN' values and then replace them with the preceding 4x30 double? I have attached the cell array in question. Thanks in advance.
Réponse acceptée
Plus de réponses (1)
Walter Roberson
le 16 Jan 2021
The below accounts for the possibility of multiple nan blocks.
It does not, however, account for the possibility that the first block is nan (there is no previous block to fill from in that case.)
hasnan = cellfun(@(C) any(isnan(C(:))), XTrain2_all);
idx = 1 : length(C);
idx(hasnan) = 1;
idx = fillmissing(idx, 'previous');
newC = C(idx);
2 commentaires
Walter Roberson
le 17 Jan 2021
Modifié(e) : Walter Roberson
le 17 Jan 2021
Corrected (tested)
load XTrain2_all.mat
hasnan = cellfun(@(C) any(isnan(C(:))), XTrain2_all);
idx = 1 : length(XTrain2_all);
idx(hasnan) = nan;
idx = fillmissing(idx, 'previous');
newXTrain2_all = XTrain2_all(idx);
Walter Roberson
le 17 Jan 2021
To also account for the possibility of the first block being nan:
load XTrain2_all.mat
hasnan = cellfun(@(C) any(isnan(C(:))), XTrain2_all);
idx = 1 : length(XTrain2_all);
idx(hasnan) = nan;
idx = fillmissing(fillmissing(idx, 'previous'),'next');
newXTrain2_all = XTrain2_all(idx);
Catégories
En savoir plus sur Matrix Indexing dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!