2013-07-15 247 views
0

我正在進行大矩陣乘法。我有一個大矩陣A(至少5000x5000)和一個列向量V(5000x1)。在我的代碼中,每個V將按元素乘以A元素的每列。我做了一個循環matlab矩陣元素單元乘法的替代方法

K = zeros(5000, 5000); 
for n=1:5000 
    K(:, n) = V.*A(:, n); 
end 

但它是如此之慢。所以,我創建指定爲V每列一個大矩陣,使得

MV=repmat(V,1,5000); 
K = MV.*A; 

速度快,但浪費了太多的記憶。當矩陣的大小增加時,它會使用太多的內存。是否有任何想法使用更少的內存,但速度很快?

+0

您是否預分配'K',以便它具有正確的大小? – Marius

回答

4

經典bsxfun

K = bsxfun(@times, A, V); 

或者,你可能想看看James Tursa'sMTIMESX(FEX中找到)。

+1

非常感謝您的意見。似乎bsxfun的工作原理,但我需要以後測試效率。至於MTIMESX,我閱讀自述文件,但它似乎只是矩陣乘法而不是逐個元素。 – user1285419