MATLAB: сравнение всех элементов двух массивов - PullRequest
2 голосов
/ 05 февраля 2010

У меня есть две матрицы в MATLAB, скажем, arr1 и arr2 размером 1000 * 1000 каждая. Я хочу сравнить их элементы и сохранить сравнение в матрице результатов resarr, которая также равна 1000 * 1000, для каждого элемента:

  • если элемент в arr1 больше, чем элемент в arr2, поместите значение 1 в результат
  • если элемент в arr2 больше, сохраните значение 2

но я не хочу делать это с циклами for, потому что это медленнее. Как я могу это сделать?


EDIT: Также, если бы я хотел сохранить различные значения RGB в матрице результатов 1000 *1000* 3, в зависимости от сравнения arr1 и arr2, можно ли это сделать без медленных циклов?

Например, store (255,0,0), если arr1 больше и (0,255,0), если arr2 больше

Ответы [ 2 ]

5 голосов
/ 05 февраля 2010
resarr = 2 - (arr1 > arr2)

arr1>arr2 сравнивает arr1 и arr2, элемент за элементом, возвращая матрицу 1000x1000, содержащую 1, где arr1 больше, и 0 в противном случае. 2 - часть превращает его в матрицу, где есть 1, если arr1 больше, чем arr2, и 2 в противном случае.

примечание: если arr1 и arr2 в какой-то момент равны, вы также получите 2 (потому что arr1> arr2 вернет 0, тогда 2-0 = 2).

2 голосов
/ 05 февраля 2010

Что касается вашего редактирования, после того как ваша матрица resarr вычислена как предложенная Ofri , вы можете изменить матрицу RGB img следующим образом:

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
...