2017-02-18 2 views
1

Ich habe eine große zweidimensionale ndarray, A und ich möchte den größten Eigenwert SVE und zugehörige Eigenvektor-Paar berechnen. Betrachtet man die NumPy-Dokumentation, scheint NumPy nur die komplette SVD zu berechnen (numpy.linalg.svd), während SciPy eine Methode hat, die genau das tut, was ich brauche (scipy.sparse.linalg.svds), aber mit dünn besetzten Matrizen, und ich möchte keine Konvertierung von A durchführen es würde zusätzliche Rechenzeit erfordern.größter singulärer Wert NumPy `ndarray`

Bis jetzt habe ich SciPy svds direkt auf der A verwendet, jedoch rät die Dokumentation, ndarray s zu diesen Methoden zu übergeben.

Gibt es eine Möglichkeit, diese Aufgabe mit einer Methode auszuführen, die ndarray Objekte akzeptiert?

Antwort

3

Wenn svds mit Ihrem dichten Array A arbeitet, verwenden Sie es weiterhin. Sie müssen es nicht in irgendetwas umwandeln. svds macht all die Anpassung, die es braucht.

Es Dokumentation sagt

A: {Sparse Matrix, LinearOperator} Array den SVD auf, die Form (M, N)

Aber was für ein LinearOperator ist zu berechnen? Es ist ein Wrapper um etwas, das ein Matrixprodukt ausführen kann. Für ein dichtes Array A.dot qualifiziert sich.

Schauen Sie sich den Code für svds an. Das erste, was ist, ist A = np.asarray(A), wenn A nicht bereits ein Linear Operator oder Sparse-Matrix ist. Dann ergreift es A.dot und (hemetianA).dot und macht einen neuen LinearOperator.

Eine spärliche Matrix in dieser Funktion hat nichts Besonderes. Es kommt nur darauf an, ein kompatibles Matrixprodukt zu haben.

Schauen Sie sich diese Zeiten:

In [358]: A=np.eye(10) 
In [359]: Alg=splg.aslinearoperator(A) 
In [360]: Am=sparse.csr_matrix(A) 
In [361]: timeit splg.svds(A) 
1000 loops, best of 3: 541 µs per loop 
In [362]: timeit splg.svds(Alg) 
1000 loops, best of 3: 964 µs per loop 
In [363]: timeit splg.svds(Am) 
1000 loops, best of 3: 939 µs per loop 

Die direkte Verwendung von A ist am schnellsten. Die Konvertierungen sind nicht hilfreich, auch wenn sie außerhalb der Timing-Schleife liegen.

Verwandte Themen