2013-04-02 14 views
21

Scipy ha many different types of sparse matrices available. Quali sono le differenze più importanti tra questi tipi e qual è la differenza nell'uso previsto?Matrici sparse di Scipy - scopo e utilizzo di diverse implementazioni

Sto sviluppando un codice in python basato su un codice di esempio in Matlab. Una sezione del codice utilizza matrici sparse - che sembrano avere un singolo (fastidioso) tipo in Matlab, e sto cercando di capire quale tipo dovrei usare in python.


1: Questo è per una classe. La maggior parte delle persone sta facendo il progetto in Matlab, ma mi piace creare un lavoro non necessario e la confusione --- apparentemente.

2: Questa è una domanda accademica: il codice funziona correttamente con il formato "CSR", ma sono interessante sapere quali sono gli utilizzi ottimali.

+4

Credo che per la maggior parte delle operazioni di algebra lineare, CSR o CSC dovrebbero essere l'opzione preferita, poiché la maggior parte delle funzioni sono state create per questi tipi. BSR è una versione a blocchi di CSR. COO e DOK sono utili per l'immissione dei dati, ma una volta che hai inserito tutto, vorrai convertirlo in uno degli altri tipi. E LIL ha un supporto migliore per cose come slicing. Non sono sicuro di quanto sia adatto DIA per le operazioni di algebra lineare. – Jaime

+1

Dovresti accettare una risposta su questo per contrassegnare la domanda come risolta :) – Will

risposta

24

Scusate se non sto rispondendo abbastanza, ma spero di poter fornire alcune informazioni.

CSC (Compressed Sparse Column) e CSR (Compressed Sparse Row) sono più compatti ed efficienti, ma difficili da costruire "da zero". Coo (Coordinate) e DOK (Dictionary of Keys) sono più facili da costruire e possono quindi essere convertiti in CSC o CSR tramiteo matrix.tocsr().

CSC è più efficiente nell'accedere ai vettori di colonna o alle operazioni di colonna, in genere, poiché è archiviato come array di colonne e il loro valore su ogni riga.

matrici CSR sono l'opposto; memorizzati come matrici di righe e i loro valori in ogni colonna e sono più efficienti nell'accedere ai vettori di riga o alle operazioni di riga.

Problemi correlati