为什么NumPy和SciPy有很多相同的函数?我应该选择哪个?

7

可能重复:
Scipy和Numpy之间的关系

例如,NumPy有窗函数bartlettblackmanhamminghanningkaiser,而SciPy也有这些以及更多, 但它们似乎产生相同的输出。

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

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

为什么会出现重复?仅仅是为了向后兼容吗?如果是这样,为什么在不同的地方定义它们的方式不同呢?在编写新代码时应该选择哪一个?


5
请参见https://dev59.com/gW025IYBdhLWcg3wIyKf。Scipy是建立在Numpy基础上的一个Python软件包,用于数学、科学和工程计算。它提供了许多高级函数和优化算法,可以扩展Numpy的功能。因此,使用Scipy通常需要先安装Numpy。 - NPE
@aix:这不是关于将numpy函数转换为scipy的问题。而是关于两者独立存在的内容,我的问题并没有在那些答案中得到解答。 - endolith
1个回答

20
SciPy FAQ中: 在理想的世界中,NumPy应该只包含数组数据类型和最基本的操作:索引、排序、重塑、基本元素级函数等。所有的数值代码应该驻留在SciPy中。然而,NumPy的一个重要目标是兼容性,所以NumPy试图保留其任一前身支持的所有功能。因此,NumPy包含一些线性代数函数,尽管这些更适合放在SciPy中。无论如何,SciPy包含了更完整功能的线性代数模块,以及许多其他数值算法。如果你正在使用Python进行科学计算,你可能应该同时安装NumPy和SciPy。大多数新特性应该放在SciPy而不是NumPy中。
所以是的,这些重复是为了向后兼容性。通常情况下,它们会给出相同的结果。然而,正如FAQ所述,新特性通常是实现到SciPy中,但未必是NumPy。这包括错误修复。例如,我发现对于一个复杂矩阵,numpy.linalg.eig返回了不正确的特征值,而scipy.linalg.eig则返回了正确的特征值。
一般来说,我更倾向于遵循FAQ中的“理想世界”场景:我使用NumPy进行基本的数组操作,而使用SciPy进行所有的线性代数计算。这样我就不会遇到任何意外情况。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接