为啥 NumPy 和 SciPy 有很多相同的功能?我应该更喜欢哪个? [复制]

Posted

技术标签:

【中文标题】为啥 NumPy 和 SciPy 有很多相同的功能?我应该更喜欢哪个? [复制]【英文标题】:Why do NumPy and SciPy have a lot of the same functions? Which should I prefer? [duplicate]为什么 NumPy 和 SciPy 有很多相同的功能?我应该更喜欢哪个? [复制] 【发布时间】:2012-06-01 17:23:46 【问题描述】:

可能重复:Relationship between scipy and numpy

例如,NumPy 有 window functionsbartlettblackmanhamminghanningkaiser,而 SciPy 有 these and several more,但它们似乎产生相同的输出。

NumPy 有numpy.fft.fft2(a, s=None, axes=(-2, -1))

SciPy 有 scipy.fftpack.fft2(x, shape=None, axes=(-2, -1), overwrite_x=0)

为什么会有重复?只是为了向后兼容?如果是这样,为什么它们在不同的地方有不同的定义?写新东西时我应该更喜欢哪个?

【问题讨论】:

请看***.com/questions/6200910/… @aix:这与嵌入到 scipy 中的 numpy 函数无关。这是关于在两者中独立存在的东西,我的问题没有得到这些答案的回答 【参考方案1】:

来自SciPy FAQ:

在理想世界中,NumPy 只包含数组数据类型和最基本的 操作:索引、排序、重塑、基本元素函数等。全部 数字代码将驻留在 SciPy 中。然而,NumPy 的重要目标之一是 兼容性,因此 NumPy 尝试保留其任一支持的所有功能 前辈。因此 NumPy 包含一些线性代数函数,即使这些更多 正确地属于 SciPy。在任何情况下,SciPy 都包含功能更全的版本 线性代数模块,以及许多其他数值算法。如果你正在做 使用 python 进行科学计算,您可能应该同时安装 NumPy 和 SciPy。 > 大多数新功能属于 SciPy 而不是 NumPy。

所以是的,重复是为了向后兼容。一般来说,它们给出相同的结果。但是,正如常见问题解答所述,新功能通常在 SciPy 中实现,但不一定是 NumPy。这包括错误修复。例如,我发现 numpy.linalg.eig 为复杂矩阵返回了不正确的特征值,而 scipy.linalg.eig 返回了正确的特征值。

一般来说,我更喜欢坚持常见问题解答中的“理想世界”场景:我使用 NumPy 进行基本的数组操作,使用 SciPy 处理我的所有线性代数。这样我就不会遇到任何意外。

【讨论】:

以上是关于为啥 NumPy 和 SciPy 有很多相同的功能?我应该更喜欢哪个? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥 scipy sparse 和 numpy 数组的乘法函数会给出不同的结果?

为啥 scipy 和 numpy fft 图看起来不同?

为啥 scipy 的稀疏 csr_matrix 的向量点积比 numpy 的密集数组慢?

numpy.polyfit 和 scipy.polyfit 有啥区别? [复制]

Matlab 中的 FFT 和 numpy / scipy 给出不同的结果

以 SQLite 和 HDF5 格式从/导入到 numpy、scipy