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

时间:2012-05-26 12:08:41

标签: python numpy scipy

  

可能重复:
  Relationship between scipy and numpy

例如,NumPy有window functions bartlettblackmanhamminghanningkaiser,而SciPy有{{3}但是它们似乎产生相同的输出。

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

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

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

1 个答案:

答案 0 :(得分:16)

来自SciPy FAQ

  

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

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

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