MATLAB - МАТЕМАТИЧЕСКАЯ ЛАБОРАТОРИЯ:сравнение всех элементов двух массивов
-
18-09-2019 - |
Вопрос
Скажем, у меня есть две матрицы в 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