我在MATLAB中有两个矩阵,可以说arr1
和arr2
,每个1000 * 1000。我想比较它们的元素并将结果保存在结果矩阵resarr
中,这也是1000 * 1000,以便每个元素:
arr1
中的元素大于arr2
中的元素,则将值1放在结果中arr2
中的元素较大,则存储值2 但是我不想用for循环来做这个,因为它比较慢。我怎么能这样做?
修改
此外,如果我想在1000 * 1000 * 3结果矩阵中存储不同的RGB值,取决于arr1
和arr2
的比较,是否可以在没有慢速循环的情况下完成?
例如,如果arr1
较大,则为store(255,0,0);如果arr2
较大,则为(0,255,0)
答案 0 :(得分:5)
resarr = 2 - (arr1 > arr2)
arr1>arr2
逐元素地比较arr1和arr2,返回包含1的1000x1000矩阵,其中arr1更大,否则为0。如果arr1大于arr2,则2 -
部分将其变为矩阵,其中有1个,否则为2。
注意:如果arr1和arr2在某个时刻是euqal,你也会得到2(因为arr1> arr2返回0,然后2-0 = 2)。
答案 1 :(得分:2)
对于您的修改,一旦您将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