由於D很大,我沒有足夠的內存來簡單地創建對角線D-D矩陣。我不斷收到'內存不足'錯誤。MATLAB中非常大的矩陣的高效乘法
不是在第一次乘法中執行M×D×D操作,而是執行M×D操作,但我的代碼仍然需要很長時間才能運行。
任何人都可以找到更有效的方法來執行乘法A'*B*A
?這是我到目前爲止已經嘗試:
D=20000
M=25
A = floor(rand(D,M)*10);
B = floor(rand(1,D)*10);
for i=1:D
for j=1:M
result(i,j) = A(i,j) * B(1,j);
end
end
manual = result * A';
auto = A*diag(B)*A';
isequal(manual,auto)
我很困惑。矩陣B應該是D-by-D還是M-by-M?你的形象說前者,但你的代碼暗示了後者。 – gnovice 2010-12-12 04:12:15
斑點,現在糾正 – matcheek 2010-12-12 04:21:21
另外,你是否試圖計算A'* B * A,這會給你一個M-M的結果? – gnovice 2010-12-12 04:47:38