我没有足够的内存来简单地创建一个对角 D-by-D 矩阵,因为 D 很大。我不断收到“内存不足”错误。
我没有在第一次乘法中执行 M x D x D 操作,而是执行 M 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)