Sto lavorando con un problema di moltiplicazione (matmul) di matrice sparse molto grande. Ad esempio, diciamo:moltiplicazione della matrice numpy in memoria triangolare/sparsa?
A è una matrice binaria (75 x 200.000). È scarso, quindi sto usando csc per l'archiviazione. Devo eseguire la seguente operazione matmul:
B = A.transpose() * Un
L'uscita sarà una matrice sparsa e simmetrica di dimensione 200Kx200K.
Purtroppo, B sta per essere modo alla grande per memorizzare nella RAM (o "in core") sul mio portatile. D'altra parte, sono fortunato perché ci sono alcune proprietà di B che dovrebbero risolvere questo problema.
Poiché B sta per essere simmetrico lungo la diagonale e sparse, potrei usare una matrice triangolare (superiore/inferiore) per memorizzare i risultati dell'operazione di matmul e un formato di archiviazione di matrice sparsa potrebbe ridurre ulteriormente le dimensioni.
La mia domanda è ... si può dire a numpy o scipy, prima del tempo, quali saranno i requisiti di archiviazione di output in modo che io possa selezionare una soluzione di archiviazione usando numpy ed evitare che la "matrice sia troppo grande" errore di runtime dopo alcuni minuti (ore) di calcolo?
In altre parole, i requisiti di memoria per il moltiplicatore di matrice possono essere approssimati analizzando il contenuto delle due matrici di input utilizzando un algoritmo di conteggio approssimativo?
In caso contrario, sto cercando una soluzione di forza bruta. Qualcosa che coinvolge Map/Reduce, out-of-core di archiviazione, o una soluzione matmul suddivisione (Algoritmo di Strassen) dai seguenti link web:
Un paio Mappa/Ridurre soluzioni di suddivisione problema
- http://www.norstad.org/matrix-multiply/index.html
- http://bpgergo.blogspot.com/2011/08/matrix-multiplication-in-python.html
Una soluzione (PyTables) stoccaggio out-of-core
Una soluzione suddivisione matmul:
- 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/
Grazie in anticipo per qualsiasi suggerimenti, commenti, o guida!
scuse per il ritardo. grazie per l'assistenza! ero preoccupato che la frase "requisiti di stoccaggio" era vaga. il codice di stima che hai inviato era * esattamente * quello che speravo di imparare.il tuo metodo è ispirato ad alcuni dei metodi analitici combinatori/asintoti che il sedgewick e il flajolet stavano facendo (rispetto ai conteggi approssimativi)? Riferimenti: 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. Purtroppo vivo in una terra lontana, lontana dal mondo accademico, quindi non avevo mai sentito parlare di nessuna delle cose che hai collegato. La mia ispirazione era semplicemente la descrizione della [CSR] (http://en.wikipedia.org/wiki/Sparse_matrix#Compressed_sparse_row_.28CSR_or_CRS.29) e [CSC] (http://en.wikipedia.org/wiki/Sparse_matrix # Compressed_sparse_column_.28CSC_or_CCS.29) formati. – Jaime