from fftpack fftfreq example code python numpy scipy fft

python - example - from scipy fftpack import fft fftfreq



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

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


Descubrí que el fft 2D de numpy era significativamente más rápido que el de scipy, pero FFTW era más rápido que los dos (usando los enlaces de 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 arrays):

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



SciPy hace más:

Además, SciPy exporta algunas de las funciones de 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 puntos de referencia de rendimiento que comparan el NumPy original y las nuevas versiones de SciPy. Mi computadora portátil arcaica 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 corre mucho más rápido a medida que aumenta el tamaño de la matriz, aunque estos son solo ejemplos artificiales y valdría la pena experimentar con ambos para su proyecto en particular.

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