Ich arbeite mit einem sehr großen Sparse Matrix Multiplikation (Matmul) Problem. Als ein Beispiel lassen Sie uns sagen:numpy matrix multiplication zu triangular/sparse storage?
A ist eine binäre (75 x 200.000) Matrix. Es ist spärlich, also benutze ich csc für den Speicher. Ich brauche den folgenden matmul Betrieb zu tun:
B = A.transpose() * A
Der Ausgang wird eine spärliche und symmetrische Matrix der Größe 200Kx200K sein.
Leider B wird Weg zu groß sein, im RAM zu speichern (oder "in Kern") auf meinem Laptop. Auf der anderen Seite bin ich glücklich, da es einige Eigenschaften für B gibt, die dieses Problem lösen sollten.
Da B entlang der Diagonalen und spärlich symmetrisch ist, könnte ich eine Dreiecksmatrix (oben/unten) verwenden, um die Ergebnisse der Matmul-Operation zu speichern, und ein Sparse-Matrix-Speicherformat könnte die Größe weiter reduzieren.
Meine Frage ist ... kann numpy oder scipy gesagt werden, vor der Zeit, wie die Ausgabe Speicheranforderungen aussehen werden, so dass ich eine Speicherlösung mit numpy auswählen und die "Matrix ist zu groß" vermeiden Laufzeitfehler nach mehreren Minuten (Stunden) der Berechnung?
Mit anderen Worten, können die Speicheranforderungen für die Matrix multipliziert werden, indem der Inhalt der zwei Eingangsmatrizen unter Verwendung eines approximativen Zählalgorithmus analysiert wird?
Wenn nicht, ich bin auf der Suche in eine Brute-Force-Lösung. Etwas Einbeziehung Karte/reduzieren, out-of-Core-Speicher oder eine matmul Unterteilung Lösung (Strassen-Algorithmus) aus den folgenden Web-Links:
Ein paar Map/Reduce Problem Unterteilung Lösungen
- http://www.norstad.org/matrix-multiply/index.html
- http://bpgergo.blogspot.com/2011/08/matrix-multiplication-in-python.html
A out-of-Kern (PyTables) Aufbewahrungslösung
A matmul Unterteilung Lösung:
- https://en.wikipedia.org/wiki/Strassen_algorithm
- http://facultyfp.salisbury.edu/taanastasio/COSC490/Fall03/Lectures/FoxMM/example.pdf
- http://eli.thegreenplace.net/2012/01/16/python-parallelizing-cpu-bound-tasks-with-multiprocessing/
Vielen Dank im Voraus für jede Empfehlungen, Kommentare oder Anleitung!
Entschuldigungen für die Verzögerung. Danke für die Hilfe! Ich war besorgt, dass der Ausdruck "Speicheranforderungen" vage war. Der Schätzungscode, den du geschickt hast, war genau das, was ich mir erhofft hatte.ist Ihre Methode von einigen der analytischen Kombinatorik/Asymptotik Arbeit inspiriert, die sedgewick und flajolet getan hatten (in Bezug auf ungefähre Zahlen)? Referenzen: https://en.wikipedia.org/wiki/Analytic_combinatorics http://algo.inria.fr/flajolet/Publications/AnaCombi/ https://en.wikipedia.org/wiki/Asymptotic_theory https: //en.wikipedia.org/wiki/Approximate_counting_algorithm –
@ct. Leider lebe ich in einem Land, weit weg von der Wissenschaft, also hatte ich noch nie etwas von dem gehört, was du verlinkt hast. Meine Inspiration war einfach die Beschreibung der [CSR] (http://en.wikipedia.org/wiki/Sparse_matrix#Compressed_sparse_row_.28CSR_or_CRS.29) und [CSC] (http://en.wikipedia.org/wiki/Sparse_matrix # Compressed_sparse_column_.28CSC_or_CCS.29) Formate. – Jaime