2016-07-03 3 views
6

Empfangene Weisheit ist es, scipy.linalg über numpy.linalg Funktionen vorzuziehen. Für die lineare Algebra würde ich idealerweise (und bequemerweise) die Funktionalitäten von numpy.array und scipy.linalg kombinieren wollen, ohne jemals auf numpy.linalg zu schauen. Dies ist nicht immer möglich und kann zu frustrierend werden.Wie kann man numpy.linalg anstelle von scipy.linalg verwenden?

Gibt es eine vergleichende Checkliste der äquivalenten Funktionen aus diesen beiden Modulen, um schnell festzustellen, wann numpy.linalg zu verwenden, falls eine Funktion in scipy.linalg fehlt?

z.B. Es gibt scipy.linalg.norm() und numpy.linalg.norm(), aber es scheint keine scipy Äquivalente von numpy.linalg.matrix_rank() und numpy.linalg.cond() zu geben.

Antwort

8

So ist die normale Regel, nur scipy.linalg zu verwenden, da es im Allgemeinen alle numpy.linalg Funktionalität und mehr unterstützt. Die documentation sagt dieser:

auch

numpy.linalg für mehr lineare Algebra-Funktionen. Beachten Sie, dass, obwohl scipy.linalg die meisten importiert, identische Funktionen von scipy.linalg mehr oder leicht unterschiedliche Funktionen bieten können.

Jedoch ist matrix_rank() nur in NumPy.

Hier können wir die Unterschiede zwischen den Funktionen von beiden Bibliotheken zur Verfügung gestellt sehen, und wie SciPy ist vollständiger:

In [2]: from scipy import linalg as scipy_linalg 
In [3]: from numpy import linalg as numpy_linalg 
In [4]: dir(scipy_linalg) 
Out[4]: 
[ 
... 
'absolute_import', 
'basic', 
'bench', 
'blas', 
'block_diag', 
'cho_factor', 
'cho_solve', 
'cho_solve_banded', 
'cholesky', 
'cholesky_banded', 
'circulant', 
'companion', 
'coshm', 
'cosm', 
'cython_blas', 
'cython_lapack', 
'decomp', 
'decomp_cholesky', 
'decomp_lu', 
'decomp_qr', 
'decomp_schur', 
'decomp_svd', 
'det', 
'dft', 
'diagsvd', 
'division', 
'eig', 
'eig_banded', 
'eigh', 
'eigvals', 
'eigvals_banded', 
'eigvalsh', 
'expm', 
'expm2', 
'expm3', 
'expm_cond', 
'expm_frechet', 
'find_best_blas_type', 
'flinalg', 
'fractional_matrix_power', 
'funm', 
'get_blas_funcs', 
'get_lapack_funcs', 
'hadamard', 
'hankel', 
'helmert', 
'hessenberg', 
'hilbert', 
'inv', 
'invhilbert', 
'invpascal', 
'kron', 
'lapack', 
'leslie', 
'linalg_version', 
'logm', 
'lstsq', 
'lu', 
'lu_factor', 
'lu_solve', 
'matfuncs', 
'misc', 
'norm', 
'ordqz', 
'orth', 
'orthogonal_procrustes', 
'pascal', 
'pinv', 
'pinv2', 
'pinvh', 
'polar', 
'print_function', 
'qr', 
'qr_delete', 
'qr_insert', 
'qr_multiply', 
'qr_update', 
'qz', 
'rq', 
'rsf2csf', 
's', 
'schur', 
'signm', 
'sinhm', 
'sinm', 
'solve', 
'solve_banded', 
'solve_circulant', 
'solve_continuous_are', 
'solve_discrete_are', 
'solve_discrete_lyapunov', 
'solve_lyapunov', 
'solve_sylvester', 
'solve_toeplitz', 
'solve_triangular', 
'solveh_banded', 
'special_matrices', 
'sqrtm', 
'svd', 
'svdvals', 
'tanhm', 
'tanm', 
'test', 
'toeplitz', 
'tri', 
'tril', 
'triu'] 

In [5]: dir(numpy_linalg) 
Out[5]: 
[ 
... 
'absolute_import', 
'bench', 
'cholesky', 
'cond', 
'det', 
'division', 
'eig', 
'eigh', 
'eigvals', 
'eigvalsh', 
'info', 
'inv', 
'lapack_lite', 
'linalg', 
'lstsq', 
'matrix_power', 
'matrix_rank', 
'multi_dot', 
'norm', 
'pinv', 
'print_function', 
'qr', 
'slogdet', 
'solve', 
'svd', 
'tensorinv', 
'tensorsolve', 
'test'] 

In [6]: 

Beachten Sie, dass sind alle diese Funktionen nicht.

SciPy liefert scipy.linalg.expm_cond(), aber dies gibt nur die Bedingung in der Frobenius-Norm zurück, während numpy.linalg.cond() mehrere Normen unterstützt.

Verwandte Themen