2015-10-14 102 views
0

我有两个矩阵A和B,我想对它们执行明智的最大元素。我只写了下面的代码,效率非常低,需要很长时间才能运行。MATLAB中两个矩阵的高效元素明智函数

A = C; 
for x = 1 : height 
    for y = 1 : width 
     if(A(x, y) < B(x, y)) 
      A(x, y) = B(x, y); 
     end 
    end 
end 

我搜索SO和想通了,类似的问题一直在使用bsxfun功能(123)回答。但我不明白这一点。

可以bsxfun也适用于此吗?

我想要的就像A = max(B, C)

+2

是不是'MAX(A,B) “你想要什么?从[documentation](http://es.mathworks.com/help/matlab/ref/max.html):_MAX(X,Y)返回一个与X和Y大小相同的数组,其中 最大元素取自X或Y.任何一个都可以是标量._ –

+0

无论如何,您的代码将占用最少的代码,因为当A> B时,您分配的内容更小。 – Pieter21

+0

@ Pieter21谢谢我纠正了它 – Hamed

回答

1
bsxfun(@(x,y) x<y,A,B) 

将返回索引,其中A> B。

所以:

A(bsxfun(@(x,y) x<y,A,B))=B(bsxfun(@(x,y) x<y,A,B)); 

应该做的伎俩。

但是,没有必要使用bsxfun,你可以去:

A(A<B)=B(A<B); 

或者只是使用MAX(可耻的是我),如注释中规定

+0

你可以在最后一次做比较并在阵列上使用它来刮更多时间。 – percusse

+0

尽管我反思,但你对这个问题的回答对于理解'bsxfun'功能非常有帮助,谢谢 – Hamed