后者只是前者的同义词,还是它们是FFT的两种不同实现方式?哪个更好呢?
SciPy提供了更多功能:
此外,SciPy通过自己的接口导出了一些NumPy的特性。例如,如果你执行scipy.fftpack.helper.fftfreq和numpy.fft.helper.fftfreq,实际上运行的是相同的代码。
然而,SciPy有许多功能的自己的实现。该源代码包括性能基准测试,比较原始的NumPy和新的SciPy版本。我的老式笔记本电脑显示如下:
Fast Fourier Transform
=================================================
| real input | complex input
-------------------------------------------------
size | scipy | numpy | scipy | numpy
-------------------------------------------------
100 | 0.07 | 0.06 | 0.06 | 0.07 (secs for 7000 calls)
1000 | 0.06 | 0.09 | 0.09 | 0.09 (secs for 2000 calls)
256 | 0.11 | 0.11 | 0.12 | 0.11 (secs for 10000 calls)
512 | 0.16 | 0.21 | 0.20 | 0.21 (secs for 10000 calls)
1024 | 0.03 | 0.04 | 0.04 | 0.04 (secs for 1000 calls)
2048 | 0.05 | 0.09 | 0.08 | 0.08 (secs for 1000 calls)
4096 | 0.05 | 0.08 | 0.07 | 0.09 (secs for 500 calls)
8192 | 0.10 | 0.20 | 0.19 | 0.21 (secs for 500 calls)
似乎当数组大小增加时,SciPy的运行速度会显着提高,尽管这只是编造出来的例子,但对于您特定的项目来说,值得进行双方面的实验。
检查源代码http://www.scipy.org/Download#head-312ad78cdf85a9ca6fa17a266752069d23f785d1 。是的,那些.f文件确实是Fortran!:-D
我发现numpy的二维fft明显比scipy的快,但使用PyFFTW绑定的FFTW速度更快。性能测试在这里:
code.google.com/p/agpy/source/browse/trunk/tests/test_ffts.py
结果如下(对于n x n
数组):
n sp np fftw
8: 0.010189 0.005077 0.028378
16: 0.010795 0.008069 0.028716
32: 0.014351 0.008566 0.031076
64: 0.028796 0.019308 0.036931
128: 0.093085 0.074986 0.088365
256: 0.459137 0.317680 0.170934
512: 2.652487 1.811646 0.571402
1024: 10.722885 7.796856 3.509452
从github上查看每个仓库,scipy不仅仅是导入numpy的版本并重命名(虽然它确实借用了一些功能)。如果您想区分实现差异,则需要深入代码,因为文档没有直接进行比较。