2012-05-28 180 views
3

我有兩個矩陣4x2。我該如何實現這種乘法:輸出應該是矩陣4x1,其中每個元素是原始矩陣中行中元素乘積的總和。 像這樣:將兩個矩陣元素乘以總和

[1 2; 
A = 3 4; 
    5 6; 
    7 8] 

    [1 2; 
B = 3 4; 
    5 6; 
    7 8] 

結果C矩陣將是:

[1*1 + 2*2; 
C = 3*3 + 4*4; 
    5*5 + 6*6; 
    7*7 + 8*8] 

回答

2

這裏每行一個更整潔的回答:

C = dot(A, B, 2); 

你基本上想要行的點積。這是MATLAB中的一個向量化操作,因此比元素級產品更有效,然後進行求和操作。

2

我MATLAB是有點生疏,但儘量

D = A .* B; 
C = D(:,1) + D(:,2); 

第一個操作將產生一個包含4×2矩陣來自A和B的相應元素的產品,而第二次操作則添加來自同一行的產品。

你正在尋找的結果也從產品矩陣對角線元素,因此您可以使用

C = diag(A * transpose(B)); 

雖然這將是更大的矩陣非常低效的。

+11

或者只是'sum(A. * B,2)' – Ansari

+0

@Ansari:好的;我不知道'sum()'可以這種方式使用。 –

+1

@Ansari:太好了。這是我正在尋找的。您的解決方案適用於任何規模的矩陣。如果您發表評論爲答案,我會將其標記爲正確 – Alkersan

1

Aasmund Eldhuset大多是正確的,但我認爲最後一行應

C = D(:,1) + D(:,2); 

,只要你想總結最後一列

+0

道歉。我誤解了之前的評論。這其實是正確的。 – lajulajay

+0

事實上,你沒有誤讀它 - 大約一分鐘,它實際上讀'D(1,:) + D(2,:)',因爲我忘記了Matlab是行主還是列主要。然而,像這樣的更正應該作爲評論發佈(或者你可以在收集到足夠的聲譽時自己製作)。 :-) –

+0

採取了點,很高興知道我沒有想象的事情:P。 – lajulajay