由于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