【问题标题】:Matlab: sort an array to ascending order in terms of binary interpretationMatlab:根据二进制解释将数组按升序排序
【发布时间】:2013-10-28 06:09:51
【问题描述】:

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

输入

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

【问题讨论】:

  • 我没有方便的 matlab 来测试它,但您应该能够使用从 n 到 1 的列上的排序行进行基数排序。
  • @beaker 谢谢你,效果很好,中间没有任何转换——你能不能把我的答案复制到你的答案中,这样我的答案就可以被删除了。 +1
  • 很高兴能提供帮助,但您应该接受自己的回答,因为它包含了我的回答和 Luis Mendo 的回答。
  • @beaker 好的,我赞成这两个答案——它需要等待 2 天......

标签: matlab sorting binary


【解决方案1】:

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

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

【讨论】:

  • 附带说明,如果数据太大Error using bin2dec (line 36) Binary string must be 52 bits or less.,这将不起作用。
【解决方案2】:

根据我在 cmets 中的建议,“您应该能够在从 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 的索引很酷的想法。

【讨论】:

    【解决方案3】:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-23
      • 2021-09-25
      • 2019-09-09
      • 1970-01-01
      • 1970-01-01
      • 2012-08-04
      • 2021-04-11
      • 1970-01-01
      相关资源
      最近更新 更多