D が大きいため、単純に対角 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)