0

该数组每行包含二进制数:一行表示一个二进制数。它们没有顺序,所以我试图找到一个命令,我可以通过它按升序对它们进行排序,怎么做?

输入

>> [1 0 0 1 1; 0 0 1 0 0; 1 0 1 0 0]

ans =

     1     0     0     1     1
     0     0     1     0     0
     1     0     1     0     0
     0     0     0     0     1

目标:通过输入以下输出,我可以通过哪个命令获得?

     0     0     0     0     1
     0     0     1     0     0
     1     0     0     1     1
     1     0     1     0     0
4

3 回答 3

1

根据我在评论中的建议,“您应该能够使用从 n 到 1 的列上的排序行进行基数排序。”,OP 使以下代码正常工作:

>> A=[1 0 0 1 1; 0 0 1 0 0; 1 0 1 0 0;0 0 0 0 1];sortrows(A)

ans =

      0     0     0     0     1
      0     0     1     0     0
      1     0     0     1     1
      1     0     1     0     0

现在已经包含了 Luis 的索引很酷的想法。

于 2013-10-26T16:09:33.287 回答
1

Beaker 在评论中回答“您应该能够使用从 n 到 1 的列上的排序行进行基数排序。” - 它有效!然后 Luis Mendo 有一种方法来存储原始定位,以便将想法放在一起,哇!

>> A=[1 0 0 1 1; 0 0 1 0 0; 1 0 1 0 0;0 0 0 0 1]
[vv ii]=sortrows(A)

A =

     1     0     0     1     1
     0     0     1     0     0
     1     0     1     0     0
     0     0     0     0     1


vv =

     0     0     0     0     1
     0     0     1     0     0
     1     0     0     1     1
     1     0     1     0     0


ii =

     4
     2
     1
     3
于 2013-10-26T15:53:28.683 回答
1

您可以通过转换为字符串 ( num2str) 然后从二进制字符串转换为数字 ( bin2dec) 来实现:

[vv ii] = sort(bin2dec(num2str(data)));
data_sorted = data(ii,:);
于 2013-10-26T15:40:43.547 回答