2012-10-01 50 views
5

Tengo un código de simulación que produce una matriz binaria en matlab siempre con 10 filas pero con un número variable de columnas.Comparación por pares de filas en una matriz

Por ejemplo aquí:

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 

que quiero hacer comparación por pares entre las filas para determinar cuántos elementos son diferentes entre las dos filas, en última instancia, para crear una matriz simétrica de 10x10 con el número de diferencias entre el filas P.ej. Fila 1 en comparación con la fila 2 ... y así sucesivamente.

Así que el elemento (1,2) (así como el elemento 2,1) de esta matriz compararía la fila 1 con la fila 2 y sería 1 en este caso, ya que solo hay una diferencia.

Sé que esto se puede hacer con una gran cantidad de códigos de bucle, sin embargo, creo que es probable que haya una manera más simple que yo desconozco.

¿Cómo se debe lograr esto?

Respuesta

4

Sin ningún look que puede hacer:

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 

Lo que dice es que a es diferente de b si y sólo si a = 1 y b = 0, o bien a = 0 y b = 1, lo que equivale a a * (1-b) + b * (1-a).

Cada entrada en la matriz de resultados contiene el número de diferencias entre las filas (i, j). Al realizar la multiplicación de matrices, calcula lo anterior para cada entrada de cualquier par de filas y resume los resultados.

+0

+1 muy agradable :) – angainor

Cuestiones relacionadas