我的内存不足以简单地创建一个大小为D的对角线D矩阵,因为D很大。我一直收到'out of memory'错误。
我尝试通过在第一次乘法中执行M x D操作而不是M x D x 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)