Matlab:根据二进制解释对数组进行升序排序

时间:2013-10-26 15:15:52

标签: matlab sorting binary

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

输入

>> [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

3 个答案:

答案 0 :(得分:1)

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

[vv ii] = sort(bin2dec(num2str(data)));
data_sorted = data(ii,:);

答案 1 :(得分:1)

Beaker在评论中回答说“你应该能够使用sortrows在第n列到第1列进行基数排序。” - 它有效!然后Luis Mendo有一种存储原始定位的方法,所以把想法放在一起,vuola!

>> 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

答案 2 :(得分: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关于索引的很酷的想法。