2012-10-01 97 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