Ich habe einen csr_matrix, sagen wir, ich rief:Was ist der richtige Weg, Elemente zu einer CSR_Matrix hinzuzufügen?
import scipy.sparse as ss
mat = ss.csr.csr_matrix((50, 100))
Jetzt möchte ich auf dieser Matrix einige der Werte ändern. Ich nenne:
mat[0,1]+=1
Und ich bekomme:
SparseEfficiencyWarning: Changing the sparsity structure of a csr_matrix is expensive. lil_matrix is more efficient.
Ich brauche nur ein paar Werte (auf der Skala der Matrix endlich) zu setzen kurz nach der Gründung der Matrix. Später werde ich nur die Spalten lesen oder elementweise Operationen auf der ganzen Matrix durchführen (wie .log1p()
)
Was wäre der richtige Weg, das zu tun? Derzeit kann ich die Warnung einfach ignorieren, aber es gibt möglicherweise einen besseren Weg, der keine Warnung liefert.
CSR und CSC sind die bevorzugten Formate für schnelle lineare Algebra-Berechnungen. Normalerweise erstellen Sie Ihre Matrix als COO, LIL oder DOK, wandeln sie nur einmal in CSC oder CSR um und machen dann die teure Mathematik daraus. Es würde helfen, Ihren Anwendungsfall besser zu verstehen: Was wollen Sie mit der Matrix machen? Müssen Sie zwischen teuren Vorgängen neue Daten hinzufügen oder können die Zusätze am Anfang gestapelt werden? – Jaime
bearbeitet, ich hoffe es ist klarer. –
Erstellen Sie eine [COO-Matrix] (http://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.sparse.coo_matrix.html), fügen Sie die Werte hinzu und konvertieren Sie sie in a CSC- oder CSR-Matrix, wenn es einen Geschwindigkeitsvorteil für Ihre Operationen gibt. Wenn Sie elementare Operationen bevorzugen, ist der COO wahrscheinlich in Ordnung. Wenn Sie Spalten extrahieren möchten, wählen Sie CSC, wenn Zeilen CSR. – Jaime