Gegeben eine Matrix A
, muss ich mit anderen n
Vektoren multiplizieren (d. H. i=1...n
). Die Größe von A
kann wie 5000x5000
und somit Bi
wie 5000x1
sein.Matlab wiederholte Matrixmultiplikation - Schleife gegen eingebaute Leistungen
Wenn ich das Produkt in der folgenden Art und Weise auswerten:
for i=1:n
product=A*Bi;
% do something with product
end
Das Ergebnis ist Art und Weise (Größenordnung) langsamer als die Berechnung der Produkte wie:
%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
Das Problem ist, dass die Zahl n
von Vektoren Bi
möglicherweise zu groß, um im Speicher gespeichert zu werden, zum Beispiel n=300000
, so muss ich eine Schleife Ansatz verwenden, wo jedes Mal, wenn ich das Produkt auswerte, verwenden Sie es und dann den Vektor verwerfen.
Warum ist ein solcher Ansatz im Vergleich zur direkten Multiplikation so langsam, und gibt es Möglichkeiten, dies zu überwinden?
Gut gelesen auf dieser Oberseite ic ist [Warum ist MATLAB so schnell in der Matrixmultiplikation?] (http://stackoverflow.com/questions/6058139/why-is-matlab-so-fast-in-matrix-multiplication) – Adriaan
Ernsthaft, mathworks sollte ein richtiges tun Benchmark dazu und drucke es irgendwo in großen neongrünen Buchstaben. Diese Frage wurde schon oft gestellt und wird immer noch gestellt. Offensichtlich sind die Antworten im Web für einige Leute nicht gut genug, also warum versuchen Mathworks (mit besserem Einblick in die Quelle) das nicht? @xarz Kein Wortspiel für die Frage. Wenn die Antworten im Web nicht zufriedenstellend sind, gibt es offensichtlich keine ausreichend gute Antwort auf die Frage. – patrik
@patrik Vielleicht hast du Recht, aber ich habe auf Stackoverflow geschaut und ich habe kein Thema gefunden, das sich mit genau diesem Problem beschäftigt. Übrigens, wenn Sie hier einige Verweise verbinden können, die sich mit diesem genauen Problem beschäftigen, können sie für zukünftige Leser nützlich sein. Vielen Dank. – xanz