我在一篇文章中读到,一个共轭矩阵的IFFT是一个全为实数的矩阵。但是我无法使用numpy在Python中复制这个结果。
# Hermitian matrix: https://en.wikipedia.org/wiki/Hermitian_matrix
m = [[2 , 2 + 1j, 4 ],
[2 - 1j, 3 , 0 + 1j],
[4 , 0 - 1j, 1 ]]
m = numpy.matrix(m)
im = numpy.fft.ifft2(m)
print im
这将产生不仅仅是实数的结果:
[[ 2.00000000+0.j 0.42955838-0.16666667j 0.23710829-0.16666667j]
[ 0.23710829+0.16666667j -0.66666667-0.57735027j 0.38490018+0.j ]
[ 0.42955838+0.16666667j -0.38490018+0.j -0.66666667+0.57735027j]]
我的理解是Hermitian矩阵有问题吗?还是我使用numpy有误?
np.allclose(m, np.conj(m))
不是测试厄米对称性的方法,而是测试实值性的方法。只有当imag(m)
和imag(conj(m))
都为零时,它们才相等。这里的对称性是指在频率k
和-k
处的 FFT 结果:m[k]==conj(m[N-k])
,其中N
是m
的长度,且0<=k<N
。对于二维 FFT,结果会更加复杂。 - Cris Luengo