Подтвердить что ты не робот

В чем разница между numpy.fft и scipy.fftpack?

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

4b9b3361

Ответ 1

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

Ответ 2

Я обнаружил, что 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

Ответ 3

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

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

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