Nie mam wystarczającej ilości pamięci, aby utworzyć macierz diagonalną D-by-D, ponieważ D jest duże. Wciąż pojawia się błąd "braku pamięci".Efektywne mnożenie bardzo dużych macierzy w MATLAB
Zamiast wykonywać operacje M x D x D w pierwszym mno eniu, wykonuję operacje M x D, ale mój kod trwa do wieków.
Czy ktokolwiek może znaleźć skuteczniejszy sposób przeprowadzenia mnożenia A'*B*A
? Oto co mam próbowano do tej pory:
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)
Jestem zdezorientowany. Czy macierz B ma być D-przez-D czy M-by-M? Twój obraz mówi o tym pierwszym, ale twój kod sugeruje to drugie. – gnovice
dobrze zauważony, teraz poprawiony – matcheek
Ponadto, czy próbujesz obliczyć A '* B * A, który dałby ci wynik M-by-M? – gnovice