2010-02-05 180 views
2

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

  • 如果在arr1的元件是一个比arr2更大,将值1在结果
  • 如果arr2元素越大,存储的值2

,但我不想与循环要做到这一点,因为这是比较慢。我怎样才能做到这一点?


编辑: 另外,如果我想不同的RGB值存储在1000×1000×3矩阵的结果,取决于arr1arr2比较,莫非是不慢的循环呢?

例如商店(255,0,0)如果arr1较大和(0,255,0)如果arr2较大

+0

这是一个非常类似的问题到http:// stackoverflow.com/questions/2202641/how-do-i-compare-all-elements-of-two-arrays-in-matlab – Doresoom 2010-02-05 18:06:42

+2

@Doresoom:同意。 *非常相似,但技术上不同。 – gnovice 2010-02-05 18:10:40

回答

5
resarr = 2 - (arr1 > arr2) 

arr1>arr2比较ARR1和ARR2,逐个元素,返回一个包含1000×1000 1矩阵其中arr1较大,否则为0。 2 -部分使它成为一个矩阵,如果arr1大于arr2,则有1个,否则为2。注意:如果arr1和arr2在某点上是euqal,那么你也会得到2(因为arr1> arr2返回0,然后2-0 = 2)。

+0

你能告诉我,如果我想将不同的RGB值分配给1000 * 1000 * 3结果数组,取决于arr1和arr2的比较结果,我会怎么做? – n0ob 2010-02-05 18:28:00

+2

作为一个评论,即使这个代码是正确的,性能明智的注意,通过存储1/2而不是真/假,你正在创建一个矩阵x8乘以逻辑类型的大小.. – Amro 2010-02-05 19:51:53

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 
+0

ty帮助了很多 – n0ob 2010-02-06 22:25:44