Como faço para comparar todos os elementos de dois arrays?

Eu tenho dois grandes matrizes com cerca de 1000 linhas e 1000 colunas. Eu preciso comparar cada elemento dessas matrizes e armazenar 1 em outra matriz se os elementos correspondentes forem iguais.

Eu posso fazer isso com loops for mas isso leva muito tempo. Como posso fazer isso mais rápido?

As respostas dadas estão todas corretas. Eu só queria elaborar sobre a observação do gnovice sobre testes de ponto flutuante.

Ao comparar números de ponto flutuante para igualdade, é necessário usar um valor de tolerância. Dois tipos de comparações de tolerância são comumente usados: tolerância absoluta e tolerância relativa. ( fonte )

Uma comparação de tolerância absoluta de a e b parece com:

 |ab| < tol 

Uma comparação de tolerância relativa se parece com:

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

Você pode implementar os dois acima como funções 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) ); 

Então você pode usá-los como:

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

Se suas duas matrizes A e B forem do mesmo tamanho, você poderá fazer isso:

 index = A == B; 

e index será um array lógico com uns em todos os lugares, um elemento de A e B são iguais e zero de outra forma.

Uma palavra de alerta…

Se A e B contiverem inteiros, o acima deve estar bem. No entanto, se eles contiverem valores de ponto flutuante, você poderá obter resultados indesejados. O código acima só terá valores de um para elementos exatamente iguais. Mesmo a menor diferença fará com que os elementos sejam considerados desiguais.

Você pode ver as respostas desta questão para obter mais informações sobre como lidar com os “perigos das operações de ponto flutuante”. Uma solução seria verificar se os elementos da matriz estão dentro de uma determinada tolerância um do outro, assim:

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

Acima, você obterá um index array lógico com aqueles em todos os lugares em que os elementos de A e B estão entre 0,0001 um do outro e zero de outra forma.

Basta usar o operador == normal:

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