scipy.fft.

next_fast_len#

scipy.fft.next_fast_len(цель, вещественный=False)#

Найти следующий быстрый размер входных данных для fft, для дополнения нулями и т.д.

Алгоритмы БПФ SciPy достигают скорости благодаря рекурсивной стратегии "разделяй и властвуй". Это зависит от эффективных функций для малых простых множителей длины входных данных. Таким образом, преобразования быстрее всего при использовании составных чисел из простых множителей, обрабатываемых реализацией fft. Если есть эффективные функции для всех оснований <= n, тогда результатом будет число x >= target только с простыми множителями < n. (Также известный как n-гладкие числа)

Параметры:
цельint

Длина, с которой начинать поиск. Должна быть положительным целым числом.

вещественныйbool, необязательно

True, если БПФ включает вещественный вход или выход (например, rfft или hfft но не fft). По умолчанию False.

Возвращает:
выходint

Наименьшая быстрая длина, большая или равная target.

Примечания

Результат этой функции может измениться в будущем из-за изменений в производительности, например, если будут добавлены новые простые множители.

Вызов fft или ifft с вещественными входными данными выполняет 'R2C' преобразование внутренне.

Примеры

На конкретной машине БПФ простой длины занимает 11.4 мс:

>>> from scipy import fft
>>> import numpy as np
>>> rng = np.random.default_rng()
>>> min_len = 93059  # prime length is worst case for speed
>>> a = rng.standard_normal(min_len)
>>> b = fft.fft(a)

Дополнение нулями до следующей регулярной длины сокращает время вычисления до 1.6 мс, ускорение в 7.3 раза:

>>> fft.next_fast_len(min_len, real=True)
93312
>>> b = fft.fft(a, 93312)

Округление до следующей степени двойки не оптимально, занимает 3.0 мс для вычисления; в 1.9 раза дольше, чем размер, заданный next_fast_len:

>>> b = fft.fft(a, 131072)