这里的 Tensorflow 文档说:
tf.linalg.pinv ''类似于 numpy.linalg.pinv。它仅在 rcond'' 的默认值上有所不同。
但是,tf.linalg.pinv 要求矩阵是浮点类型,而 np.linalg.pinv 可以用于复杂矩阵。
我想知道为什么他们只会为浮点类型创建它,以及是否有一种直接的方法可以修改tf.linalg.pinv以用于复杂的矩阵。
这里的 Tensorflow 文档说:
tf.linalg.pinv ''类似于 numpy.linalg.pinv。它仅在 rcond'' 的默认值上有所不同。
但是,tf.linalg.pinv 要求矩阵是浮点类型,而 np.linalg.pinv 可以用于复杂矩阵。
我想知道为什么他们只会为浮点类型创建它,以及是否有一种直接的方法可以修改tf.linalg.pinv以用于复杂的矩阵。
我刚刚面临同样的情况。如果您需要显式构建逆,请查看本文:
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 )