Matlab: comparer tous les éléments de deux tableaux
-
18-09-2019 - |
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 dearr2
, 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
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