2012-05-26 16 views
4

可能重复:
Relationship between scipy and numpy为什么NumPy和SciPy有很多相同的功能?我应该选择哪一个?

例如,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)

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

+5

请参阅http://stackoverflow.com/questions/6200910/relationship-between-scipy-and-numpy – NPE

+0

@aix:这不是关于numpy功能transcluded到scipy。这是关于两者都独立存在的东西,我的问题没有被这些答案所回答 – endolith

回答

16

SciPy FAQ

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

所以是的,重复是为了向后兼容。一般来说,他们给出了相同的结果。然而,正如FAQ所述,新功能通常在SciPy中实现,但不一定是NumPy。这包括错误修复。例如,我发现numpy.linalg.eig为复杂矩阵返回了不正确的特征值,而scipy.linalg.eig则返回了正确的特征值。一般来说,我更喜欢坚持常见问题解答中的“理想世界”场景:我使用NumPy进行基本数组操作,并使用SciPy处理所有线性代数。这样我就不会遇到任何惊喜。

相关问题