2012-10-01 138 views
5

我有一個仿真代碼,它在MATLAB中產生一個總是10行但列數不同的二進制矩陣。成對比較矩陣中的行

例如這裏:

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

我想做的行之間兩兩比較,以確定有多少元素的兩行之間的不同,最終創建的差異數的10×10的對稱矩陣行。例如。第1行與第2行比較...等等。

所以這個矩陣的(1,2)元件(以及2,1-元件)將比較行1與第2行和將是1在這種情況下,僅存在單一的差。

我知道這可以用很多循環編碼來完成,但是感覺有可能是一種我不知道的簡單方法。

這應該如何實現?

回答

4

沒有任何期待,你可以這樣做:

A=[1 0 1; 0 1 1; 1 1 1 ; 0 0 0]; 
A*(1-A)'+(1-A)*A' 
ans = 
0  2  1  2 
2  0  1  2 
1  1  0  3 
2  2  3  0 

它所要表達的是,ab當且僅當A = 1和b = 0或= 0,B = 1, 這相當於是不同的到a *(1-b)+ b *(1-a)。

結果矩陣中的每個條目都包含行(i,j)之間的差異數。通過執行矩陣乘法,您可以爲任何一對行的每個條目計算以上值,並對結果進行總結。

+0

+1非常好:) – angainor