I eine Matrix A
in coo
Format haben (die von scipy.sparse.bmat
erstellt wird):sparsity Struktur für eine einzelne Operation Ändern
A
<80000x80000 sparse matrix of type '<class 'numpy.float64'>'
with 278480 stored elements in COOrdinate format>
I würden alle Werte in einer bestimmten Zeile
- ändern mögen von dieser Matrix
- Lösen Sie
spsolve(A, g)
für einigeg
auf der geänderten Matrix
Jetzt kann ich Zeilen im coo
Format nicht ändern. Die folgenden Werke:
AA = A.tocsr()
AA[10, :] = 1 # or whatever other array I want to put here
spsolve(AA, g)
aber ich werde eine
SparseEfficiencyWarning: Changing the sparsity structure of a csr_matrix is expensive. lil_matrix is more efficient.
SparseEfficiencyWarning)
Jetzt erhalten, soweit ich das verstehe, ist lil_matrix
ineffizient in der linearen Algebra zu lösen - so auch wenn ich die sparsity Struktur lil
verändert hatte Ich hätte/hätte danach wieder zu csr
oder csc
wechseln sollen.
Im Allgemeinen, ist es das wert? Ich möchte nicht jede einzelne Operation, die ich hier mache, schnell testen: Gibt es eine Daumenregel, wie kostspielig "sich verändernde Sparsität" im Vergleich zu "Zeilentrennung" im Vergleich zu "arithmetischen Operationen" ist? Wie gehen Programmierer typischerweise mit solchen Problemen um?
Sie können Ihre eigenen Timings immer tun. Meiner Erfahrung nach ist die 'Effizienzwarnung' hauptsächlich dazu da, Sie davon abzuhalten, dies in einer Schleife zu tun. Eine Änderung wie diese ignoriert sie einmal. Umstellung auf "lil" ist es nicht wert. – hpaulj