У меня недостаточно памяти, чтобы просто создать диагональную матрицу 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)