say if i have a matrix a:
a=[1 2 3;4 5 6;7 8 9;NaN NaN NaN]
i want to sort this in descending order, so i use
sort(a,1,'descend')
but the problem is, matlab puts the NaN at the top, is there a way to make it so that NaN is at the bottom? Thanks

 채택된 답변

Matt Tearle
Matt Tearle 2012년 4월 12일

4 개 추천

As long as you don't have any -Inf values in a, you could always do a quick hack:
a=[1 2 3;4 5 6;7 8 9;NaN NaN NaN]
a(isnan(a)) = -Inf;
a = sort(a,1,'descend');
a(isinf(a)) = NaN

추가 답변 (3개)

Huw S
Huw S 2018년 9월 18일

9 개 추천

Very late to this for the original poster, but for anyone later looking how to do this....
It's in the matlab functionality.
sort(a,'descend','MissingPlacement','last')

댓글 수: 1

Steven Lord
Steven Lord 2018년 9월 18일
That functionality was introduced in release R2017a. While I agree that's a good way to solve the problem now, it was not an option when the question was originally asked in 2012.

댓글을 달려면 로그인하십시오.

Matt Kindig
Matt Kindig 2012년 4월 12일

1 개 추천

You could do something like this:
a=[1 2 3;4 5 6;7 8 9;NaN NaN NaN];
a= sort(a,1,'descend');
in = any( isnan(a),2);
a = [ a(~in,:); a(in,:)];
Kye Taylor
Kye Taylor 2012년 4월 12일

0 개 추천

This will work
newA = a; % copy original matrix
isANanRow = any(isnan(a),2); % find rows that have a nan in them
% move those nan rows to the end
newA(end-nnz(isANanRow)+1:end,:) = a(isANanRow,:);
% sort nonnan rows and place at top of newA array
newA(1:nnz(~isANanRow),:) = sort(a(~isANanRow,:),1,'descend');

카테고리

도움말 센터File Exchange에서 Shifting and Sorting Matrices에 대해 자세히 알아보기

태그

질문:

2012년 4월 12일

댓글:

2018년 9월 18일

Community Treasure Hunt

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

Start Hunting!

Translated by