如何知道何时使用numpy.linalg而不是scipy.linalg?

2024-06-17 12:19:31 发布

您现在位置:Python中文网/ 问答频道 /正文

公认的智慧是偏爱scipy.linalg,而不是numpy.linalg函数。在做线性代数时,理想地(并且方便地)我想把numpy.array和{}的功能结合起来,而不必考虑{}。这并不总是可能的,而且可能会变得太令人沮丧。在

是否有这两个模块的等效函数的比较检查表,以便在scipy.linalg中没有函数的情况下快速确定何时使用numpy.linalg?在

例如,有scipy.linalg.norm()和{},但似乎没有{}和{}的scipy等价物。在


Tags: 模块函数功能numpynorm情况scipyarray
1条回答
网友
1楼 · 发布于 2024-06-17 12:19:31

因此,通常的规则是使用scipy.linalg,因为它通常支持numpy.linalg的所有功能。documentation表示:

See also

numpy.linalg for more linear algebra functions. Note that although scipy.linalg imports most of them, identically named functions from scipy.linalg may offer more or slightly differing functionality.

但是,^{}只在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确实提供了^{},但它只返回Frobenius范数中的条件,而^{}支持多个规范。在

相关问题 更多 >