Shifting elements to the left / top
1 visualizzazione (ultimi 30 giorni)
Mostra commenti meno recenti
a = [1 2 3;
NaN 4 5;
6 NaN 7;
8 9 NaN;
NaN NaN 10;
NaN 11 NaN;
12 NaN NaN;
NaN NaN NaN]
I'd like to transform a matrix above into the following:
a = [1 2 3;
4 5 NaN;
6 7 NaN;
8 9 NaN;
10 NaN NaN;
11 NaN NaN;
12 NaN NaN;]
i.e. remove all NaN elements and shift remaining elements to the left. And if dimension mismatch, fill with NaN into it.
No iterations preferred
0 Commenti
Risposte (1)
Matt J
il 19 Apr 2013
b=a.';
bmap0=isnan(b);
b(:,all(bmap0,1))=[];
bmap0=~isnan(b);
data=b(bmap0);
b(~bmap0)=inf;
b=sort(b);
bmap1=~isinf(b);
b(bmap1)=data(:);
bmap2=isinf(b);
b(isinf(b))=nan;
a=b.'
1 Commento
Matt J
il 19 Apr 2013
A lot of this would simplify if you worked columnwise, instead of row-wise and used Infs instead of NaNs
Vedere anche
Categorie
Scopri di più su NaNs 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!