2012-10-10 36 views
2

如果矩陣A是在X和矩陣B是Y.Matlab的乘法

做一個multiplcation將只是Z = X * Y。正確假設兩個陣列的大小相同。

我怎樣才能用for循環來計算它呢?

+2

「A在X」是什麼意思? –

回答

3

通過ja72的anwser是錯誤的,查看其下我的意見,看看爲什麼。一般來說,在這些簡單的線性代數運算中,你的代碼不可能擊敗矢量化版本,即使你用C/mex編寫你的代碼也是如此(除非你的矩陣中有一定的稀疏結構,你可以在你的代碼中利用它)。原因在於,Matlab將矩陣乘法的實際工作傳遞給用Fortran編寫的Lapack庫,然後調用Blas庫,並根據特定的機器架構進行優化。

1

是矩陣乘法是A*B並且逐個元素是A*.B。如果A是(N×M的),B是(MXK)大小則C=A*B代碼

更新

for i=1:N 
    for j=1:K 
    C(i,j) = A(i,:)*B(:,j) 
    end 
end 
+0

真棒!怎麼做一個for循環比A * B快一點? –

+0

for循環是否更容易緩存? –

+0

實際上,爲了使循環更快,您可以切換「i」和「j」循環,使第一個數組索引更改爲最快。這與數組如何存儲在內存中有關。 – ja72

3

是的acai是正確的,我記得當我開始使用Matlab時想知道同樣的事情。只是提供一些更詳細的信息,acai說,LAPACK是線性代數包裝,它是很多其他語言用來解決這些類型的問題,Python使用SciPy,Java jlapack等連接到它。BLAS是基本線性代數子程序,它處理你所問的矩陣乘法的基本問題。 Acai也是正確的,你永遠無法擊敗Matlab給矩陣乘法的性能,這是他們的麪包和黃油,他們已經花了幾十年時間,優化這些操作的性能。