MATLAB:比较两个数组的所有元素

时间:2010-02-05 17:50:34

标签: matlab matrix comparison vectorization

我在MATLAB中有两个矩阵,可以说arr1arr2,每个1000 * 1000。我想比较它们的元素并将结果保存在结果矩阵resarr中,这也是1000 * 1000,以便每个元素:

  • 如果arr1中的元素大于arr2中的元素,则将值1放在结果中
  • 如果arr2中的元素较大,则存储值2

但是我不想用for循环来做这个,因为它比较慢。我怎么能这样做?


修改 此外,如果我想在1000 * 1000 * 3结果矩阵中存储不同的RGB值,取决于arr1arr2的比较,是否可以在没有慢速循环的情况下完成?

例如,如果arr1较大,则为store(255,0,0);如果arr2较大,则为(0,255,0)

2 个答案:

答案 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