首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何知道何时使用numpy.linalg而不是scipy.linalg?

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

Stack Overflow用户
提问于 2016-07-03 08:15:01
回答 1查看 3.9K关注 0票数 7

公认的智慧是更喜欢scipy.linalg而不是numpy.linalg函数。对于线性代数,理想情况下(并且方便地),我希望将numpy.arrayscipy.linalg的功能组合在一起,而不考虑使用numpy.linalg。这并不总是可能的,可能会变得太令人沮丧。

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

例如,有scipy.linalg.norm()numpy.linalg.norm(),但似乎没有numpy.linalg.matrix_rank()numpy.linalg.cond()的同义词。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-03 08:41:20

因此,通常的规则是只使用scipy.linalg,因为它通常支持所有numpy.linalg功能以及更多功能。文档说:

也见 numpy.linalg用于更多的线性代数函数。请注意,尽管scipy.linalg导入了大多数函数,但从scipy.linalg中获得相同名称的函数可能提供更多或略有不同的功能。

然而,matrix_rank()只存在于NumPy中。

在这里,我们可以看到两个库提供的函数之间的区别,以及SciPy是如何更完整的:

代码语言:javascript
运行
复制
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()则支持多个范数。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38168016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档