PyTorch旧版torch.rfft/irfft在1.9版本的兼容替换方案咨询
PyTorch 1.9版本兼容旧版FFT接口解决方案
PyTorch 1.8+推出的torch.fft模块统一了FFT相关API,旧版接口返回实部、虚部拼接在最后一维的实张量,新版接口默认返回复数张量,参数逻辑也做了调整,以下是你提供的三段代码的等价替换方案:
1. 旧版torch.rfft替换
旧代码:
fU = torch.rfft(u, 1, onesided=False)
新版等价代码:
# signal_ndim=1 表示对最后1维做FFT,onesided=False对应完整复数FFT fU = torch.view_as_real(torch.fft.fft(u, dim=-1))
torch.view_as_real会把复数张量的实部、虚部在最后一维拼接,和旧版输出的shape完全一致。
2. 旧版torch.irfft替换
旧代码:
U = torch.irfft(fU, 1, onesided=False)
新版等价代码:
# 先把实部虚部拼接的张量转回复数张量,逆FFT后取实部匹配旧版输出逻辑 U = torch.fft.ifft(torch.view_as_complex(fU), dim=-1).real
3. 旧版torch.fft替换
旧代码:
torch.fft(x, x.ndim)
新版等价代码:
# x.ndim表示对所有维度做N维FFT,输出保持实部虚部拼接格式 torch.view_as_real(torch.fft.fftn(x, dim=tuple(range(x.ndim))))
注意事项
- 如果你原本的旧代码中
onesided参数为True,则对应替换为torch.fft.rfft/torch.fft.irfft即可,无需调整其他逻辑 - 替换后可通过
torch.allclose(旧版输出, 新版输出, atol=1e-6)验证数值一致性,排除浮点计算误差影响
内容的提问来源于stack exchange,提问作者Nikita Bessonov
相关产品推荐
相关产品推荐

