scipy.sparse Standardwert

8

Das Sparse-Matrix-Format (Dok) setzt voraus, dass Werte von Schlüsseln, die nicht im Wörterbuch sind, gleich Null sind. Gibt es eine Möglichkeit, einen anderen Standardwert als Null zu verwenden?

Gibt es auch eine Möglichkeit, den Logarithmus einer dünn besetzten Matrix zu berechnen (ähnlich wie bei np.log in der normalen numpy Matrix)

    
ElKamina 06.06.2011, 18:10
quelle

1 Antwort

8

Diese Funktion ist nicht integriert, aber wenn Sie das wirklich brauchen, sollten Sie in der Lage sein, Ihre eigene Klasse dok_matrix oder die Klasse Scipy von Unterklasse zu schreiben. Die Scipy-Implementierung ist hier: Ссылка Zumindest in den Orten, wo dict.* Anrufe werden getätigt, der Standardwert muss geändert werden - und vielleicht müssen noch einige Änderungen vorgenommen werden.

Ich würde jedoch versuchen, das Problem so zu formulieren, dass es nicht benötigt wird. Wenn Sie zum Beispiel lineare Algebra machen, können Sie den konstanten Ausdruck isolieren und stattdessen tun

%Vor%

Für die meisten Routinen der linearen Algebra (z. B. iterative Solver) können Sie op anstelle von A übergeben.

Was den Matrixlogarithmus betrifft: Der Logarithmus einer dünn besetzten Matrix (wie in scipy.linalg.logm ) ist typischerweise dicht, also sollten Sie zuerst die Matrix in eine dichte konvertieren und dann wie gewohnt den Logarithmus berechnen. Soweit ich sehe, würde die Verwendung einer dünn besetzten Matrix keinen Leistungsgewinn ergeben. Wenn Sie nur ein Produkt aus einem Vektor und dem Logarithmus log(A) * v vector berechnen müssen, kann eine Krylov-Methode jedoch helfen.

Wenn Sie OTOH den Logarithmus elementweise berechnen möchten, können Sie das .data -Attribut direkt ändern (verfügbar mindestens in COO, CSR und CSC)

%Vor%

Dies lässt die Null-Elemente alleine, aber wie oben, erlaubt dies die getrennte Behandlung des konstanten Teils.

    
pv. 06.06.2011, 19:00
quelle

Tags und Links