gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 22:25:25 24 4
gpt4 key购买 nike

公认的智慧是更喜欢 scipy.linalg 而不是 numpy.linalg 函数。为了进行线性代数,理想情况下(并且方便地)我想结合 numpy.arrayscipy.linalg 的功能,而无需考虑 numpy.linalg。这并不总是可能的,而且可能会变得太令人沮丧。

如果 scipy.linalg 中缺少函数,是否有这两个模块的等效函数的比较 list ,以快速确定何时使用 numpy.linalg

例如有 scipy.linalg.norm()numpy.linalg.norm(),但似乎没有 numpy.linalg.matrix_rank( )numpy.linalg.cond()

最佳答案

因此,通常的规则是只使用 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.

然而,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() , 但这只会返回 Frobenius 范数中的条件,而 numpy.linalg.cond()支持多种规范。

关于python - 如何知道何时使用 numpy.linalg 而不是 scipy.linalg?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38168016/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com