例如,NumPy有window functions bartlett
,blackman
,hamming
,hanning
,kaiser
,而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)
。
为什么会出现重复?只是为了向后兼容?如果是这样,为什么他们在不同的地方定义不同?在写一些新东西时我应该更喜欢哪一个?
答案 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进行所有线性代数。这样我就不会遇到任何意外。