Ich habe zwei Matrizen vom Typ float: A
der Abmessungen 7000x100000 und
B
der Abmessungen 100000x20.
Wenn ich sie multipliziere, verbraucht mein Code meinen gesamten RAM, obwohl die Ausgabe klein ist.
Gibt es eine Möglichkeit, dies effizienter zu machen?
Ich habe versucht, this from Matlab help page zu tun, aber es hat nicht geholfen.effiziente Methode zwei nicht schwach besetzte Matrizen des Multiplizierens
Antwort
Sie können versuchen, und teilen sich in Blöcke:
durch Reihen von A
:
row_blk = 1000;
C = zeros(size(A,1), size(B,2), class(A));
f = 1; t = row_blk;
while t <= size(A,1)
C(f:t,:) = A(f,t,:)*B;
f = t+1;
t = min(size(A,1), f+row_blk-1);
end
von Spalten von A
:
col_blk = 10000;
C = zeros(size(A,1), size(B,2), class(A));
f = 1; t = col_blk;
while t <= size(A,2)
C = C + A(:,f:t)*B(f:t,:);
f = t+1;
t = min(size(A,2), f+col_blk-1);
end
ich diesen Code in GNU laufen Oktave und Speicherverbrauch dieses Codes:
a= rand(7000,100000);
b = rand(100000,20);
ist:
Absolute running time: 10.05 sec, cpu time: 9.97 sec, memory peak: 5375 Mb
und Speicherverbrauch dieser Code:
a= rand(7000,100000);
b = rand(100000,20);
c = a * b;
ist:
Absolute running time: 14.26 sec, cpu time: 14.19 sec, memory peak: 5376 Mb
so kein signifikanter Unterschied beobachtet!
Sogar die Erstellung der Matrizen belegt meinen RAM – iLoveCamelCase
@iLoveCamelCase Wie in anderen Antwort mit einer Schleife notiert können Sie Teilmatrizen erstellen, multiplizieren, speichern Ergebnisse und dann mit dem restlichen Teil der Matrizen fortfahren – rahnema1
Ich benutze 32-Bit-Version von Octave. Es ist nicht möglich, eine Matrix a (7000,100000) zu erstellen. Der Fehler ist - "Fehler: zu wenig Arbeitsspeicher oder zu große Abmessungen für Octaves Indextyp". Um mit einer solchen Matrix zu arbeiten, benötigen Sie eine 64-Bit-Version von Matlab/Octave. Ist deine Oktave 64-Bit? – SergV
- 1. Sonderfall dünn besetzte Matrizen Multiplikation
- 2. Wie stacked mehrere dünn besetzte Matrizen (Feature-Matrizen)?
- 3. Scipy: Ermöglichen dünn besetzte Matrizen erweiterte Indizierung?
- 4. multiplizieren `csr` dünn besetzte Matrizen unterschiedlicher Größe python
- 5. Scipy dünn besetzte Matrizen - Zweck und Verwendung verschiedener Implementierungen
- 6. Wie bekomme ich dünn besetzte Matrizen in H2O?
- 7. Wie man dünn besetzte Matrizen mit Hilfe der Hmatrix multipliziert
- 8. Verketten Sie dünn besetzte Matrizen in Python mit SciPy/Numpy
- 9. Gibt es eine numpy.delete() Entsprechung für dünn besetzte Matrizen?
- 10. Gibt es Unterstützung für dünn besetzte Matrizen in Python?
- 11. scipy Äquivalent von numpy.prod() für dünn besetzte Matrizen
- 12. zwei numpy Matrizen verbinden
- 13. Symmetrisierung von Scipy-Sparse-Matrizen
- 14. Numpy: effiziente lineare Algebra für blockdiagonale Matrizen im komprimierten Format
- 15. Effiziente Methode zum Finden der Entfernung zwischen zwei 3D-Punkten
- 16. Iterieren durch zwei dünne Matrizen
- 17. Produkt von zwei Toeplitz Matrizen?
- 18. Effiziente Nächste-Nachbarn-Suche nach dünn besetzten Matrizen
- 19. Fütterung scipy.sparse() Sparse-Matrizen in CVXOPT
- 20. Effiziente Methode zur Berechnung der Diagonalen des Inversen einer Matrix
- 21. Effiziente Methode zur Simulation des vollständigen äußeren Joins in MySQL?
- 22. Sind dünn besetzte Matrizen in der Regel in der Reihenfolge der größeren oder der größeren Reihenreihenfolge gespeichert?
- 23. Python transparent schwach Referenzierung
- 24. Stapeln von zwei dünn besetzten Matrizen mit verschiedenen Dimensionen
- 25. Effiziente Art des Zeichnens in OpenGL ES
- 26. Wie zwei Python-Matrizen zu kombinieren numpy
- 27. Ist System.Threading.Semaphore schwach?
- 28. Effiziente Art des Schreibens Algorithmus
- 29. spärlich besetzte Nachschlagetabelle in SQL
- 30. Python: Multiplizieren zwei 1d Matrizen in numpy
Haben die Matrizen denselben numerischen Typ? Wenn "A" ein Integer-Typ ist, aber "B" ein Gleitkommatyp ist, dann gibt es eine implizite Umwandlung von "A" in Fließkomma-Punkt, der mehr Speicher als erwartet aufnehmen würde. Ich bin ein wenig verwirrt darüber, ob deine Matrizen spärlich sind oder nicht. Der Tag sagt 'Sparse-Matrix', aber der Titel sagt nicht spärlich. – jez
Beide sind Float. Es tut mir leid, dass ich erwähnt haben sollte, dass – iLoveCamelCase
Sie beide Matrizen 'A' und' B' im Speicher halten können, bevor Sie sie multiplizieren? bekommst du "aus dem mem" nur, wenn du versuchst zu multiplizieren? – Shai