2010-02-05 6 views
2

J'ai deux matrices dans MATLAB disons arr1 et arr2 de taille 1000 * 1000 chacun. Je veux comparer leurs éléments et enregistrer la comparaison dans une matrice de résultat resarr qui est également 1000 * 1000 tel que pour chaque élément:MATLAB: comparer tous les éléments de deux tableaux

  • si l'élément arr1 est plus grand que celui arr2, placez la valeur 1 dans le résultat
  • si l'élément arr2 est plus grand, stocker la valeur 2

mais je ne veux pas le faire avec des boucles parce que c'est plus lent. Comment puis-je faire ceci?


EDIT: Aussi, si je voulais stocker différentes valeurs RVB dans un 1000 * 1000 * matrice 3 résultat, en fonction de la comparaison des arr1 et arr2, pourrait-il se faire sans boucles lentes?

Par exemple magasin (255,0,0) si arr1 est plus grande et (0,255,0) si arr2 est plus grande

+0

Ceci est une question très semblable à http: // stackoverflow.com/questions/2202641/how-do-i-compare-all-elements-of-two-arrays-in-matlab – Doresoom

+2

@Doresoom: D'accord. * Très * similaire, mais * techniquement * différent. – gnovice

Répondre

5
resarr = 2 - (arr1 > arr2) 

arr1>arr2 compare arr1 et arr2, élément par élément, le retour 1000x1000 matrice contenant une où arr1 est plus grand, et 0 sinon. la partie 2 - en fait une matrice où il y a 1 si arr1 était plus grand que arr2, et 2 sinon.

note: si arr1 et arr2 sont euqal à un certain point, vous obtiendrez également 2 (car arr1> arr2 renvoie 0, puis 2-0 = 2).

+0

pouvez-vous me dire ce que je ferais si je voulais attribuer une valeur RGB différente à un tableau de résultats 1000 * 1000 * 3, en fonction des résultats de comparaison de arr1 et arr2 ?? – n0ob

+2

En guise de remarque, même si ce code est correct, les performances indiquent qu'en stockant 1/2 au lieu de true/false, vous créez une matrice x8 fois la taille du type logique. – Amro

2

En ce qui concerne votre édition, une fois que vous avez votre matrice resarr calculé comme Ofri suggéré, vous pouvez modifier une matrice RVB img de la manière suivante:

N = numel(resarr); %# The number of image pixels 

index = find(resarr == 1); %# The indices where arr1 is bigger 
img(index) = 255;   %# Change the red values 
img(index+N) = 0;   %# Change the green values 
img(index+2*N) = 0;   %# Change the blue values 

index = find(resarr == 2); %# The indices where arr2 is bigger 
img(index) = 0;    %# Change the red values 
img(index+N) = 255;   %# Change the green values 
img(index+2*N) = 0;   %# Change the blue values 
+0

ty qui a beaucoup aidé – n0ob

Questions connexes