在Matlab中用NaN对矩阵进行重新排序

在Matlab中用NaN对矩阵进行重新排序,matlab,Matlab,我在Matlab中有一个维数为mx2的矩阵。矩阵的某些行可以在第一列或第二列中包含NaN。我想通过将带有NaN的行放在末尾来重新排列矩阵的行。此外,我想首先列出第二列中带有NaN的行,然后列出第一列中带有NaN的行 比如说 A=[NaN 11; 10 NaN; 5 8; 2 0; NaN 3; 9 NaN; 1000 0]; A_new= [5 8; 2 0; 1000

我在Matlab中有一个维数为mx2的矩阵。矩阵的某些行可以在第一列或第二列中包含NaN。我想通过将带有NaN的行放在末尾来重新排列矩阵的行。此外,我想首先列出第二列中带有NaN的行,然后列出第一列中带有NaN的行

比如说

A=[NaN   11;
    10    NaN;
    5     8;
    2     0;
    NaN   3;
    9     NaN;
    1000  0];

A_new= [5 8; 
        2 0; 
        1000 0; 
        10 NaN; 
        9 NaN; 
        NaN 11; 
        NaN 3];
你能帮我写这段代码吗?我试过先排序,然后再重新排序

[ii ii] = sort(sum(isnan(A),2))
out = A(ii,:)
但它不起作用。

您可以使用isnan+sortrows:

n = isnan(A);              % a binary matrix representing position of nan
[~,idx]= sortrows(n);      % get indexes for sorted elements
A_new = A(idx,:);          % reorder the matrix based on idx

A_new =
      5      8
      2      0
   1000      0
     10    NaN
      9    NaN
    NaN     11
    NaN      3