6

可能重复:
scipy 和 numpy 之间的关系

例如,NumPy 有窗口函数 bartlett, blackman, hamming, hanning, kaiser,而 SciPy 有这些以及更多,但它们似乎产生相同的输出。

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

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

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

4

1 回答 1

19

SciPy 常见问题解答

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

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

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

于 2012-05-26T15:46:26.707 回答