2

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

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

但我不想用 for 循环来做这件事,因为那比较慢。我怎样才能做到这一点?


编辑: 另外,如果我想将不同的 RGB 值存储在 1000*1000*3 结果矩阵中,取决于 and 的比较arr1arr2可以在没有慢循环的情况下完成吗?

例如存储 (255,0,0) ifarr1更大和 (0,255,0) ifarr2更大

4

2 回答 2

5
resarr = 2 - (arr1 > arr2)

arr1>arr2逐个元素比较 arr1 和 arr2,返回 1000x1000 矩阵,其中 arr1 较大时包含 1,否则返回 0。该2 - 部分使其成为一个矩阵,如果 arr1 大于 arr2,则为 1,否则为 2。

注意:如果 arr1 和 arr2 在某些时候是 euqal,你也会得到 2(因为 arr1>arr2 返回 0,然后 2-0=2)。

于 2010-02-05T17:53:14.667 回答
2

关于您的编辑,一旦您按照Ofriresarr的建议计算了矩阵,您可以通过以下方式修改 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
于 2010-02-05T19:03:16.527 回答