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

标准 FFT#

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

计算一维 FFT。

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

计算一维逆 FFT。

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

计算二维 FFT。

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

计算二维逆 FFT。

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

计算 N 维 FFT。

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

计算 N 维逆 FFT。

实数 FFT#

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

计算实数输入的一维 FFT。

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

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

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

计算实数输入的二维 FFT。

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

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

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

计算实数输入的 N 维 FFT。

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

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

厄米共轭 FFT#

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.float64numpy.ndarray。CuPy 函数不遵循此行为,如果输入的类型是 numpy.float16numpy.float32numpy.complex64,它们将返回 numpy.complex64numpy.float32

在内部,cupy.fft 始终会生成与所需变换对应的 cuFFT 计划(详情请参阅 cuFFT 文档)。如果可能,将使用 N 维计划,而不是为每个要变换的轴应用单独的一维计划。使用 N 维计划可以为多维变换提供更好的性能,但比可分离的一维计划需要更多 GPU 显存。用户可以通过设置 cupy.fft.config.enable_nd_planning = False 来禁用 N 维计划。这种调整计划类型的能力与不使用预计算 FFT 计划的 NumPy API 不同。

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

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

多 GPU FFT#

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