Question

J'ai deux matrices à Matlab permet de dire 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:

  • si l'élément en arr1 est plus grand que celui de arr2, placer 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?


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 grand

Était-ce utile?

La solution

resarr = 2 - (arr1 > arr2)

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

. Remarque: si arr1 et arr2 sont euqal à un moment donné, vous obtenez également 2 (parce que arr1> arr2 return 0, puis 2-0 = 2)

Autres conseils

En ce qui concerne votre édition, une fois que vous avez votre matrice resarr calculée 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top