Data una matrice A
, ho bisogno di moltiplicare con altri n
vettori Bi
(ad esempio i=1...n
). La dimensione di A
può essere come 5000x5000
e quindi Bi
come 5000x1
.Matlab ripetuta moltiplicazione matrice - loop vs prestazioni integrate
Se valuto il prodotto nel seguente modo:
for i=1:n
product=A*Bi;
% do something with product
end
Il risultato è il modo (ordini di grandezza) più lento di calcolo dei prodotti come:
%assume that S is a matrix that contains the vectors Bi as columns, i.e. S(:,i)=Bi, then:
results=A*S; %stores all the products in matrix form
% do something with results
Il problema è che il numero n
di vettori Bi
potrebbe essere troppo grande per essere archiviato in memoria, ad esempio n=300000
, quindi è necessario utilizzare un approccio ad anello in cui ogni volta che valuto il prodotto, utilizzarlo e quindi scartare il vettore Bi
.
Perché un tale approccio è così lento rispetto alla moltiplicazione diretta e ci sono modi per superarlo?
Buona lettura su questo top ic is [Perché MATLAB è così veloce nella moltiplicazione delle matrici?] (http://stackoverflow.com/questions/6058139/why-is-matlab-so-fast-in-matrix-multiplication) – Adriaan
Seriamente, la matematica dovrebbe fare una corretta punto di riferimento su questo e stamparlo in grandi lettere verdi al neon da qualche parte. Questa domanda è stata posta molte volte e viene ancora chiesta. Chiaramente le risposte sul web non sono abbastanza buone per alcune persone, quindi perché la matematica (con una migliore comprensione della fonte) cerca di farlo? @xarz Nessun gioco di parole per chiedere. Se le risposte sul web non soddisfano, apparentemente non c'è una risposta abbastanza buona alla domanda. – patrik
@patrik Forse hai ragione, ma ho guardato sullo stackoverflow e non ho trovato un argomento che si occupasse di questo problema esatto. A proposito, se riesci a collegare qui alcuni riferimenti che trattano di questo problema, potrebbero essere utili per i futuri lettori. Grazie. – xanz