2016-07-03 3 views
6

Получил мудрость, чтобы предпочесть scipy.linalg более numpy.linalg функции. Для выполнения линейной алгебры, идеально (и удобно), я хотел бы объединить функции numpy.array и scipy.linalg, не глядя на numpy.linalg. Это не всегда возможно и может стать слишком разочаровывающим.Как узнать, когда следует использовать numpy.linalg вместо scipy.linalg?

Есть ли сравнительный контрольный список эквивалентных функций из этих двух модулей, чтобы быстро определить, когда использовать numpy.linalg, если функция отсутствует в scipy.linalg?

например. Существуют scipy.linalg.norm() и numpy.linalg.norm(), но, похоже, нет никаких скудных эквивалентов numpy.linalg.matrix_rank() и numpy.linalg.cond().

ответ

8

Итак, нормальное правило заключается в том, чтобы просто использовать scipy.linalg, поскольку он в целом поддерживает все функции numpy.linalg и многое другое. documentation говорит, что это:

Смотрите также

numpy.linalg для более линейных функций алгебры. Обратите внимание, что хотя scipy.linalg импортирует большинство из них, идентично названные функции от scipy.linalg могут предлагать больше или немного отличающиеся функциональные возможности.

Однако matrix_rank() только в NumPy.

Здесь мы можем увидеть различие между функциями, предоставляемых оба библиотеками, и как SciPy более полное:

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]: 

Обратите внимание, что не все эти функции.

SciPy дает scipy.linalg.expm_cond(), но это возвращает условие только в норме Фробениуса, тогда как numpy.linalg.cond() поддерживает несколько норм.

Смежные вопросы