Sorting NaN
조회 수: 34 (최근 30일)
이전 댓글 표시
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
댓글 수: 0
채택된 답변
Matt Tearle
2012년 4월 12일
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
댓글 수: 0
추가 답변 (3개)
Huw S
2018년 9월 18일
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
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
2012년 4월 12일
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,:)];
댓글 수: 0
Kye Taylor
2012년 4월 12일
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');
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Logical에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!