离散傅里叶变换 (cupy.fft)#

提示

NumPy API 参考:离散傅里叶变换 (numpy.fft) <https://numpy.org/doc/stable/reference/routines.fft.html>`_

标准 FFT#

fft(a[, n, axis, norm])

计算一维快速傅里叶变换。

ifft(a[, n, axis, norm])

计算一维逆FFT。

fft2(a[, s, axes, norm])

计算二维快速傅里叶变换。

ifft2(a[, s, axes, norm])

计算二维逆快速傅里叶变换。

fftn(a[, s, axes, norm])

计算 N 维傅里叶变换。

ifftn(a[, s, axes, norm])

计算 N 维逆 FFT。

实数快速傅里叶变换#

rfft(a[, n, axis, norm])

计算实输入的一维快速傅里叶变换。

irfft(a[, n, axis, norm])

计算实数输入的一维逆FFT。

rfft2(a[, s, axes, norm])

计算实数输入的二维快速傅里叶变换。

irfft2(a[, s, axes, norm])

计算实数输入的二维逆FFT。

rfftn(a[, s, axes, norm])

计算实数输入的 N 维 FFT。

irfftn(a[, s, axes, norm])

计算实数输入的N维逆FFT。

Hermitian FFTs#

hfft(a[, n, axis, norm])

计算具有厄米特对称性的信号的FFT。

ihfft(a[, n, axis, norm])

计算具有厄米特对称性的信号的FFT。

辅助例程#

fftfreq(n[, d])

返回 FFT 采样频率。

rfftfreq(n[, d])

返回实数输入的FFT采样频率。

fftshift(x[, axes])

将零频分量移到频谱中心。

ifftshift(x[, axes])

fftshift() 相反的操作。

CuPy 特定的 API#

详情请参见下面的描述。

config.set_cufft_callbacks(...)

用于设置加载和/或存储回调的上下文管理器。

config.set_cufft_gpus(gpus)

设置在多GPU FFT中使用的GPU。

config.get_plan_cache()

获取每个线程、每个设备的计划缓存,如果不存在则创建一个。

config.show_plan_cache_info()

显示此线程上所有计划缓存的信息。

标准化#

默认的归一化方式(norm"backward"None)使得正向变换不进行缩放,而逆向变换则按 \(1/n\) 进行缩放。如果关键字参数 norm"forward",则与 "backward" 完全相反:正向变换按 \(1/n\) 进行缩放,而逆向变换不进行缩放。最后,如果关键字参数 norm"ortho",则正向和逆向变换均按 \(1/\sqrt{n}\) 进行缩放。

代码兼容性特性#

NumPy 的 FFT 函数总是返回类型为 numpy.complex128numpy.float64 的 numpy.ndarray。CuPy 函数不遵循此行为,如果输入的类型是 numpy.float16numpy.float32numpy.complex64,它们将返回 numpy.complex64numpy.float32

在内部,cupy.fft 总是生成一个 *cuFFT 计划*(详见 cuFFT 文档),对应于所需的变换。如果可能,将使用 n 维计划,而不是对每个要变换的轴应用单独的 1D 计划。使用 n 维计划可以为多维变换提供更好的性能,但比可分离的 1D 计划需要更多的 GPU 内存。用户可以通过设置 cupy.fft.config.enable_nd_planning = False 来禁用 n 维计划。这种调整计划类型的能力是与 NumPy API 的一个偏差,后者不使用预计算的 FFT 计划。

此外,可以通过使用 cupyx.scipy.fftpack.get_fft_plan() 返回的现有计划作为上下文管理器来抑制自动计划生成。这再次偏离了 NumPy。

最后,当使用上述类似 NumPy 的高级 FFT API 时,内部会缓存 cuFFT 计划以供可能的重用。可以通过 get_plan_cache() 获取计划缓存,并通过 show_plan_cache_info() 查询其当前状态。对于更精细的计划缓存控制,请参阅 PlanCache

多GPU快速傅里叶变换#

cupy.fft 可以使用多个GPU。要启用(禁用)此功能,请将 cupy.fft.config.use_multi_gpus 设置为 True (False)。接下来,要设置GPU的数量或参与的GPU ID,请使用函数 cupy.fft.config.set_cufft_gpus()cuFFT文档 中列出的所有限制在此处均适用。特别是,使用多个GPU并不保证性能更好。