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 de arr2, 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

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top