scipy.fft.
prev_fast_len#
- scipy.fft.prev_fast_len(target, real=False)#
查找
fft
输入数据的前一个快速大小。用于在 FFT 之前丢弃最少数量的样本非常有用。SciPy 的 FFT 算法通过递归分治策略来提高速度。 这依赖于输入长度的小素因子的高效函数。 因此,当使用 fft 实现处理的素因子的组合时,变换速度最快。 如果所有基数 <= n 都有高效的函数,那么结果将是一个数字 x <=
target
,其中只有小于或等于 n 的素因子。(也称为 n-光滑数)- 参数:
- 返回:
- outint
小于或等于
target
的最大快速长度。
注意
此函数的结果可能会在将来更改,因为性能考虑因素会发生变化,例如,如果添加了新的素因子。
使用实数输入数据调用
fft
或ifft
会在内部执行'R2C'
变换。在当前实现中,prev_fast_len 假设复数 FFT 的基数为 2,3,5,7,11,实数 FFT 的基数为 2,3,5。
示例
在特定机器上,素数长度的 FFT 需要 16.2 毫秒
>>> from scipy import fft >>> import numpy as np >>> rng = np.random.default_rng() >>> max_len = 93059 # prime length is worst case for speed >>> a = rng.standard_normal(max_len) >>> b = fft.fft(a)
在小于 max_len 的最大快速长度上执行 FFT 可将计算时间缩短至 1.5 毫秒,加速 10.5 倍
>>> fft.prev_fast_len(max_len, real=True) 92160 >>> c = fft.fft(a[:92160]) # discard last 899 samples