我在paper中读到,厄米矩阵的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]]
我对埃尔米特矩阵的理解有误吗?还是我用错了NumPy?
2条答案
按热度按时间gzszwxb41#
我认为这篇论文提到了一些略有不同的东西。厄米特矩阵等于其复共轭转置的矩阵。然而,实际输入的
fft
是“Hermite对称的”。它等于它的复共轭,但不等于它的复共轭转置。顺便说一句,我可能会把这些术语搞糊涂了,因为我唯一听说过的“Hermite对称”矩阵是在实值FFT的上下文中。尽管如此,我90%肯定这就是报纸所指的。
您确实有一个埃尔米特矩阵作为输入:
但它不是“厄米特对称的”:
然而,让我们看看当我们取实际值的FFT时会发生什么:
请注意,得到的FFT(几乎)与它的复共轭相同(有一项的符号不同,我不明白。如果有人知道的话,我将不胜感激!):
但它不是厄米特的,因为它不等于它的复共轭转置:
无论如何,这可能不是完整的答案,但希望它能让你朝着正确的方向迈进一步。
在实践中,如果您使用的是实数输入,并且只想获得实数输出,那么可以使用
np.fft.rfft
和np.fft.irff
(在这个2D例子中,使用irfft2
版本)。同样,当您计算厄米矩阵的特征值/向量并且只想要实际输出时,看看eigh
和eigvalsh
。mo49yndu2#
正如@Joe所说,论文中提到的“厄米特矩阵”可能不是我们所熟知的普通矩阵。
我发现这篇论文实际上使用了术语“埃尔米特函数”,
它被定义为
。
事实上,这是厄米对称性的一个定义。你可以从我在另一个问题下写的answer中获得一些关于什么是厄米对称的知识。
如果您希望IFFT结果全为实数,则您提供的输入应满足厄米对称。
根据维基百科,当**
X(k1, k2) = conj(X(N1-k1,N2-k2)
**时,我们说一个2D矩阵是厄米对称的。可以通过使用@Joe的示例中的
result
矩阵替换上面的X
矩阵来进行验证。