tensorflow 伪逆不适用于复杂矩阵!

数据挖掘 机器学习 Python 张量流 麻木的 矩阵
2022-02-26 22:39:10

这里的 Tensorflow 文档说:

tf.linalg.pinv ''类似于 numpy.linalg.pinv。它仅在 rcond'' 的默认值上有所不同。

但是,tf.linalg.pinv 要求矩阵是浮点类型,而 np.linalg.pinv 可以用于复杂矩阵。

我想知道为什么他们只会为浮点类型创建它,以及是否有一种直接的方法可以修改tf.linalg.pinv以用于复杂的矩阵。

1个回答

我刚刚面临同样的情况。如果您需要显式构建逆,请查看本文:

https://pdfs.semanticscholar.org/f278/b548b5121fd0d09c2e589439b97fad16ece3.pdf

特别是,给定一个需要反转的矩阵 M,您可以这样做:

    A = tf.math.real(M)
    C = tf.math.imag(M)

    r0  = tf.linalg.pinv(A) @ C
    y11 = tf.linalg.pinv(C @ r0 + A)
    y10 = -r0 @ y11

    M_inverse = tf.cast(tf.complex(y11,y10), dtype = M.dtype)

复杂性比纯复杂的实现要高一点,但到目前为止,它已被证明对我来说相当稳定。

(只是从您的另一篇文章中复制我的答案: https ://stackoverflow.com/questions/60025950/tensorflow-pseudo-inverse-doesnt-work-for-complex-matrices/60128892#60128892 )