列的 sortrows 的 Matlab 等价物

Matlab Equivalent of sortrows for columns

为了根据除第一列以外的所有列对矩阵进行排序,我使用了以下代码。我不希望 sortrows 考虑第一列,因为那是为了跟踪行号。

B = [1     1     0     0     0     0     0     0     0     1
     2     0     1     0     0     0     0     1     0     0
     3     0     0     1     0     1     0     0     1     0
     4     0     1     0     0     0     1     1     0     0
     5     0     0     1     0     0     0     0     1     0
     6     0     0     0     0     0     1     1     0     0
     7     1     0     0     1     0     0     0     0     0
     8     0     0     1     0     1     0     0     0     0]; 

D = -sortrows(-B,[2:size(B,2)])

如果要对矩阵除第一行以外的所有行进行排序,那么在降序排序时每列的第一个元素将被忽略怎么办? sortrows有没有类似的功能?

澄清一下,所需的输出是

 1     0     0     0     0     0     0     1     0     1
 2     1     1     0     0     0     0     0     0     0
 3     0     0     1     1     1     0     0     0     0
 4     1     1     0     0     0     1     0     0     0
 5     0     0     1     1     0     0     0     0     0
 6     1     0     0     0     0     1     0     0     0
 7     0     0     0     0     0     0     1     1     0
 8     0     0     1     0     1     0     0     0     0

您可以通过

执行此操作
  • 调换输入和输出
  • 将第 1 列分开
  • 您可以使用负排序索引来避免您所做的使输入和输出为负的事情
A = [B(:,1) sortrows( B(:,2:end).', -(2:size(B,1)) ).'];

>> A 
A =
     1     0     0     0     0     0     0     1     0     1
     2     1     1     0     0     0     0     0     0     0
     3     0     0     1     1     1     0     0     0     0
     4     1     1     0     0     0     1     0     0     0
     5     0     0     1     1     0     0     0     0     0
     6     1     0     0     0     0     1     0     0     0
     7     0     0     0     0     0     0     1     1     0
     8     0     0     1     0     1     0     0     0     0