¿Cuál es la diferencia entre numpy.fft y scipy.fftpack?

¿Es el último solo un sinónimo del primero, o son dos implementaciones diferentes de FFT? ¿Cuál es mejor?

SciPy hace más:

Además, SciPy exporta algunas de las funciones NumPy a través de su propia interfaz, por ejemplo, si ejecuta scipy.fftpack.helper.fftfreq y numpy.fft.helper.fftfreq , en realidad está ejecutando el mismo código.

Sin embargo, SciPy tiene sus propias implementaciones de mucha funcionalidad. La fuente tiene evaluaciones comparativas de rendimiento que comparan las versiones originales de NumPy y SciPy. Mi portátil arcaico muestra algo como esto:

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) 

Parece que SciPy se ejecuta significativamente más rápido a medida que la matriz aumenta de tamaño, aunque estos son solo ejemplos ideados y valdría la pena experimentar con ambos para su proyecto en particular.

Vale la pena ver el código fuente http://www.scipy.org/Download#head-312ad78cdf85a9ca6fa17a266752069d23f785d1 . Sí, esos archivos .f son realmente Fortran! :-RE

Descubrí que los pies cuadrados en 2D de Numpy eran significativamente más rápidos que los de Scipy, pero FFTW era más rápido que los dos (usando los enlaces PyFFTW). Las pruebas de rendimiento están aquí: code.google.com/p/agpy/source/browse/trunk/tests/test_ffts.py

Y los resultados (para n x n matrices):

  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 

Mirando los repositorys de github para cada uno, scipy no es solo importar la versión de numpy y cambiarle el nombre (aunque sí toma prestada alguna funcionalidad). Tendrá que profundizar en el código si desea discernir la diferencia en las implementaciones ya que la documentación no hace una comparación directa.

https://github.com/numpy/numpy/tree/master/numpy/fft

https://github.com/scipy/scipy/tree/master/scipy/fftpack