2015-10-14 338 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

相關問題