MATLAB: la comparación de todos los elementos de dos matrices
-
18-09-2019 - |
Pregunta
Tengo dos matrices en MATLAB permite decir arr1
y arr2
de tamaño 1000 * 1000 cada una. Quiero comparar sus elementos y guardar la comparación en un resarr
matriz de resultados que también es 1000 * 1000 de tal manera que para cada elemento:
- si el elemento en
arr1
es más grande que el dearr2
, colocar el valor 1 en el resultado - si el elemento en
arr2
es más grande, almacenar el valor 2
pero no quiero hacer esto con los bucles, ya que es más lento. ¿Cómo puedo hacer esto?
EDIT:
También si quería almacenar diferentes valores RGB en una matriz de resultados 1000 * 1000 * 3, dependiendo de la comparación de arr1
y arr2
, podría hacerse eso sin bucles lentos?
Por ejemplo tienda (255,0,0) si arr1
es más grande y (0,255,0) si arr2
es mayor
Solución
resarr = 2 - (arr1 > arr2)
arr1>arr2
compara arr1 y arr2, elemento por elemento, volviendo 1000x1000 matriz que contiene 1 donde arr1 es más grande, y 0 en caso contrario. la parte 2 -
hace que sea en una matriz, donde hay 1 de si arr1 era más grande que arr2, y 2 de otra manera.
. Nota: Si arr1 y arr2 son euqal en algún momento, también obtendrá 2 (porque arr1> retorno arr2 0, 2-0 = 2)
Otros consejos
Con respecto a su edición, una vez que tenga su matriz resarr
calcula como Ofri sugiere, se puede modificar una img
matriz RGB de la siguiente manera:
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