¿Cómo comparo todos los elementos de dos matrices?

Tengo dos grandes matrices con aproximadamente 1000 filas y 1000 columnas. Necesito comparar cada elemento de estas matrices y almacenar 1 en otra matriz si los elementos correspondientes son iguales.

Puedo hacer esto con loops pero eso lleva mucho tiempo. ¿Cómo puedo hacer esto más rápido?

Las respuestas dadas son todas correctas. Solo quería profundizar en el comentario de gnovice sobre las pruebas de coma flotante.

Al comparar los números de punto flotante para la igualdad, es necesario usar un valor de tolerancia. Se usan comúnmente dos tipos de comparaciones de tolerancia: tolerancia absoluta y tolerancia relativa. ( fuente )

Una comparación de tolerancia absoluta de b tiene el siguiente aspecto:

 |ab| < tol 

Una comparación de tolerancia relativa se ve así:

 |ab| < tol*max(|a|,|b|) + tol_floor 

Puede implementar los dos anteriores como funciones anónimas:

 %# absolute tolerance equality isequalAbs = @(x,y,tol) ( abs(xy) < = tol ); %# relative tolerance equality isequalRel = @(x,y,tol) ( abs(xy) <= ( tol*max(abs(x),abs(y)) + eps) ); 

Entonces puedes usarlos como:

 %# let x and y be scalars/vectors/matrices of same size x == y isequalAbs(x, y, 1e-6) isequalRel(x, y, 1e-6) 

Si sus dos matrices A y B son del mismo tamaño, puede hacer esto:

 index = A == B; 

y el index será una matriz lógica con las unidades en todas partes, un elemento de A y B son iguales y cero en caso contrario.

Una palabra de advertencia…

Si A y B contienen números enteros, lo anterior debería estar bien. Sin embargo, si contienen valores de punto flotante, puede obtener resultados no deseados. El código anterior solo tendrá valores de uno para los elementos que sean exactamente iguales. Incluso la diferencia más pequeña hará que los elementos se consideren desiguales.

Puede ver las respuestas de esta pregunta para obtener más información sobre cómo lidiar con los “peligros de las operaciones de coma flotante”. Una solución sería verificar que los elementos de la matriz se encuentren dentro de una tolerancia dada entre ellos, de la siguiente manera:

 tolerance = 0.0001; index = abs(AB) < = tolerance; 

Lo anterior le dará un index matriz lógica con las unidades en todas partes, los elementos de A y B están dentro de 0.0001 entre sí y cero de lo contrario.

Solo use el operador normal == :

 >> [1 2; 3 4] == [1 5; 6 4] ans = 1 0 0 1