MATLAB - МАТЕМАТИЧЕСКАЯ ЛАБОРАТОРИЯ:сравнение всех элементов двух массивов

StackOverflow https://stackoverflow.com/questions/2209194

Вопрос

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

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

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


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

Например, хранить (255,0,0), если arr1 больше и (0,255,0), если arr2 является более крупным

Это было полезно?

Решение

resarr = 2 - (arr1 > arr2)

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

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

Другие советы

Что касается вашей правки, как только вы получите свой resarr матрица , вычисляемая как Офри предполагается, что вы можете изменить матрицу 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top