后者只是前者的同义词,还是两种不同的FFT实现?哪一个更好?
答案 0 :(得分:33)
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
答案 1 :(得分:16)
我发现numpy的2D fft明显快于scipy,但FFTW比两者快(使用PyFFTW绑定)。性能测试在这里: 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
答案 2 :(得分:3)
查看每个的github存储库,scipy不只是导入numpy的版本并重命名它(虽然它确实借用了一些功能)。如果你想要识别实现中的差异,你将不得不深入研究代码,因为文档没有直接比较。