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

end*_*ith 4 python numpy scipy

可能重复:
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).

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

Set*_*ton 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进行所有线性代数.这样我就不会遇到任何意外.