How to efficiently replace NAN with Numirical value a reference vector
1 visualizzazione (ultimi 30 giorni)
Mostra commenti meno recenti
Dear User,
As per the title, may I know how to make the following code much compact and efficient. I wonder if the number of FOR-Loops can be reduced further?
Thanks in advance.
Refr=[1 20 1 4 5 2];
WithNan=[1 NaN 1 3 2 2;
1 2 1 NaN 50 2;
NaN NaN 4 9 NaN NaN;
NaN NaN NaN 9 NaN NaN];
NoNan=zeros(size(WithNan,1),size(WithNan,2));
for f_x=1:size(WithNan,1)
SelctCase=WithNan(f_x,:);
NaNLoc=find (isnan(SelctCase));
RefForNaN=Refr(NaNLoc);
for f_xx=1:size(NaNLoc,2)
SelctCase(NaNLoc(f_xx))=RefForNaN(f_xx);
end
NoNan(f_x,:)=SelctCase;
0 Commenti
Risposte (2)
Guillaume
il 8 Feb 2019
Modificato: Guillaume
il 8 Feb 2019
Certainly, the inner for loop is unnecessary (and the find, use logical indexing).
Refr=[1 20 1 4 5 2];
WithNan=[1 NaN 1 3 2 2;
1 2 1 NaN 50 2;
NaN NaN 4 9 NaN NaN;
NaN NaN NaN 9 NaN NaN];
NoNan = WithNan;
for row = 1:size(WithNan, 1)
toreplace = isnan(WithNan(row, :));
NoNan(row, toreplace) = Refr(toreplace);
end
But loops are not needed at all:
NoNan = WithNan;
filler = repmat(Refr, size(NoNan, 1), 1);
NoNan(isnan(NoNan)) = filler(isnan(NoNan));
0 Commenti
Vedere anche
Categorie
Scopri di più su Matrix Indexing in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!