【问题标题】:MATLAB: comparing all elements of two arraysMATLAB:比较两个数组的所有元素
【发布时间】:2010-02-05 17:50:33
【问题描述】:

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

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

但我不想使用 for 循环来执行此操作,因为这样会更慢。我该怎么做?


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

例如,如果 arr1 较大,则存储 (255,0,0),如果 arr2 较大,则存储 (0,255,0)

【问题讨论】:

标签: matlab matrix comparison vectorization


【解决方案1】:
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)。

【讨论】:

  • 能否告诉我,如果我想根据 arr1 和 arr2 的比较结果,为一个 1000*1000*3 的结果数组分配不同的 RGB 值该怎么办??
  • 作为备注,即使此代码是正确的,性能方面请注意,通过存储 1/2 而不是 true/false,您创建的矩阵 x8 倍于逻辑类型的大小..
【解决方案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

【讨论】:

    猜你喜欢
    • 2011-01-13
    • 2012-11-20
    • 2016-06-19
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 2021-05-06
    • 2017-08-29
    • 2013-02-08
    相关资源
    最近更新 更多