2013-10-26 61 views
0

數組每行包含二進制數:一行表示一個二進制數。他們沒有秩序,所以我試圖找到一個命令,我可以按照升序排序,怎麼做?Matlab:根據二進制解釋對數組進行升序排列

輸入

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

我沒有matlab方便的測試它,但是你應該能夠使用sortrows在第n列下降到1. – beaker

+0

@beaker謝謝,這很好地工作,沒有任何之間的轉換 - 可以你將我的答案複製到你的答案中,以便我的答案可以被刪除+1 – hhh

+0

很高興有幫助,但你應該接受你自己的答案,因爲它包含了我的答案和路易斯門多的方面。 – beaker

回答

1

燒杯在評論回答「你應該能夠做基數排序使用在第n列下至第1列的排序。「 - 它的工作原理!然後路易斯門多有一種方法來存儲原來的定位,所以把想法放在一起,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 
+0

+1。我一直忘記'sortrows'! :-) –

1

可以通過轉換爲字符串(num2str)做到這一點,然後從二進制字符串到數字(bin2dec):

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

爲'vv' +1,有用的保持秩序! – hhh

+0

作爲一個方面說明,如果數據量過大,錯誤將不會起作用使用bin2dec(第36行)的錯誤 二進制字符串必須少於52位或 少。 – hhh

1

根據我的意見建議,「你應該能夠做一個基數排序使用的列上N個了,以1調用sortRows」的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的索引建模方法。

+0

+1,不需要轉換。 – hhh