问题描述
将一个MATLAB算法更改为python代码的过程中遇到了一个问题:
当输入的tensor/多维矩阵是mnp的三维矩阵时,
MATLAB中使用的是fftn(),输出为mnp
Python中使用的是torch.rfft(3,oneside=False),输出为mnp*2
根据Pytorch官方文档的描述:
Returns
A tensor containing the real-to-complex Fourier transform result
猜测torch.rfft中的2代表实部和虚部.
验证
对于相同的输入psf
MATLAB中
fpsf_1 = fftn(psf);
Python中
fpsf = psf.rfft(3, onesided=False)
之后统一到MATLAB中进行验证:
>> fpsf(2,2,2,:)
1×1×1×2 single 数组
ans(:,:,1,1) =
-3.7205
ans(:,:,1,2) =
3.3637
>> fpsf_1(2,2,2)
ans =
-3.7205 + 3.3637i
>> fpsf(32,66,43,:)
1×1×1×2 single 数组
ans(:,:,1,1) =
0.0342
ans(:,:,1,2) =
-0.0213
>> fpsf_1(32,66,43)
ans =
0.0342 - 0.0213i
结论
当oneside=False时,torch.rfft的输出的确是实部和虚部
补充: pytorch不同版本中的高维fft
很多comments提到了不同pytorch版本中fft的函数和含义略有不同,故在文章最后对不同pytorch版本中的情况予以总结,如下面飞书链接中的表格所示。