В чем разница между numpy.fft и scipy.fftpack? - PullRequest
50 голосов
/ 15 июня 2011

Является ли позднее синонимом первого, или это две разные реализации FFT?Какой из них лучше?

Ответы [ 3 ]

34 голосов
/ 15 июня 2011

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

16 голосов
/ 13 декабря 2011

Я обнаружил, что 2D FFT numpy был значительно быстрее, чем 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
3 голосов
/ 16 июня 2011

Рассматривая репозитории github для каждого, scipy не просто импортирует версию numpy и переименовывает ее (хотя она и заимствует некоторую функциональность). Вам придется копаться в коде, если вы хотите увидеть разницу в реализациях, так как документация не делает прямого сравнения.

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

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

...