scipy.fft.

next_fast_len#

scipy.fft.next_fast_len(target, real=False)#

查找用于 fft 的输入数据的下一个快速大小,用于零填充等。

SciPy 的 FFT 算法通过递归分而治之策略来提高速度。这依赖于输入长度的小质因数的高效函数。因此,当使用 fft 实现处理的质因数的组合时,变换速度最快。如果所有基数 <= n 都有高效函数,那么结果将是一个数字 x >= target,并且只有质因数 < n。(也称为 n-平滑数)

参数:
targetint

开始搜索的长度。必须是正整数。

realbool, 可选

如果 FFT 涉及实数输入或输出(例如,rffthfft,但不是 fft)。默认为 False。

返回:
outint

大于或等于 target 的最小快速长度。

说明

此函数的结果可能会在未来发生变化,因为性能考虑因素会发生变化,例如,如果添加了新的质因数。

使用实数输入数据调用 fftifft 在内部执行 'R2C' 变换。

示例

在特定的机器上,质数长度的 FFT 需要 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)

向上舍入到下一个 2 的幂不是最佳的,计算需要 3.0 毫秒;比 next_fast_len 给定的大小长 1.9 倍

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