sorting without moving NaNs

5 ビュー (過去 30 日間)
Sebastiano delre
Sebastiano delre 2013 年 12 月 20 日
コメント済み: Image Analyst 2013 年 12 月 20 日
How can I sort an array without moving the NaN elements?
I have A=[20 10 NaN 66 NaN 12] and I would like to get A=[66 20 NaN 12 NaN 10]. Thank you for your help. Alessio.

採用された回答

Jos (10584)
Jos (10584) 2013 年 12 月 20 日
編集済み: Jos (10584) 2013 年 12 月 20 日
Use a variant of the same trick:
A=[6 20; 10 10; 3 NaN; 20 66; 4 NaN; 7 12]
B = flipud(sortrows(A,[2 1])) ; % descending sortrows based on 2nd column
A(~isnan(A(:,2)),:) = B(~isnan(B(:,2)),:)
  1 件のコメント
Image Analyst
Image Analyst 2013 年 12 月 20 日
Sebastiano's "Answer" moved here since it's a comment, not an answer:
Thanks a lot, it works perfectly!

サインインしてコメントする。

その他の回答 (4 件)

Jos (10584)
Jos (10584) 2013 年 12 月 20 日
編集済み: Jos (10584) 2013 年 12 月 20 日
A=[20 10 NaN 66 NaN 12]
B = sort(A,'descend')
A(~isnan(A)) = B(~isnan(B))

Azzi Abdelmalek
Azzi Abdelmalek 2013 年 12 月 20 日
編集済み: Azzi Abdelmalek 2013 年 12 月 20 日
A=[20 10 NaN 66 NaN 12]
idx=~isnan(A);
B=sort(A,'descend');
B(isnan(B))=[];
A(idx)=B

Jan
Jan 2013 年 12 月 20 日
編集済み: Jan 2013 年 12 月 20 日
If A is large and contains a lot of NaN's, excluding them from the sorting can save some time:
A = [20 10 NaN 66 NaN 12]
idx = ~isnan(A);
A(idx) = sort(A(idx), 'descend');
  1 件のコメント
Jos (10584)
Jos (10584) 2013 年 12 月 20 日
I doubt that excluding NaNs is faster, Jan. Increasing the proportion of NaNs seems to have little effect, or even a positive effect sometimes:
a = randperm(1e7) ; a(a(1:1e1)) = NaN ; tic ; sort(a) ; toc ;
a = randperm(1e7) ; a(a(1:1e5)) = NaN ; tic ; sort(a) ; toc ;

サインインしてコメントする。


Sebastiano delre
Sebastiano delre 2013 年 12 月 20 日
I am sorry. Actually I wrongly state my problem. I have A=[6 20; 10 10; 3 NaN; 20 66; 4 NaN; 7 12] and I would like to get A=[20 66; 6 20; 3 NaN; 7 12; 4 NaN; 10 10]. This means I would like to sort the rows of the matrix in a descending order based on the second column and without moving the rows with the NaN elements in the second column. I would like to use sortrows. Sorry again. Alessio.

カテゴリ

Help Center および File ExchangeLogical についてさらに検索

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by