TensorFlow特征值和特征向量

3

我想在TensorFlow中使用特征值,但是使用'tf.self_adjoint_eig'会得到错误的特征值/特征向量。

在下面的代码中,我试图恢复原始矩阵,但输出与原始矩阵不同。有什么想法如何解决它吗?

`A11 = tf.constant([[1, 3],[1, 1]], dtype=tf.float32)
[e1, W1] = tf.self_adjoint_eig(A11)
e1 = tf.diag(e1)
A11r = tf.matmul(tf.matmul(W1, e1), tf.matrix_inverse(W1))
A11: [[1. 3.]
[1. 1.]]
A11r: [[0.9999999 0.9999999]
[0.9999999 0.9999999]]` 

2
你的 A11 矩阵不是自伴矩阵,因此你不应该使用 tf.self_adjoint_eig - djd
1
在 TensorFlow 中是否有其他函数可以获得非自伴矩阵的特征值? - I-Python
3
很遗憾我不知道有任何类似的库,这更适用于Numpy。这里需要为其他人记录的是,tf.self_adjoint_eig仅使用输入的下三角部分,因此它会将您的输入矩阵视为tf.constant([[1, 1],[1, 1]], dtype=tf.float32)处理。最终结果也与此一致。 - djd
@I-Python 这个函数怎么样?https://www.tensorflow.org/api_docs/python/tf/linalg/eig - brethvoice
1个回答

0

如果'tf.self_adjoint_eig'不是必须的,你可以这样做:

A11 = tf.constant([[1., 3.],[1., 1.]], dtype=tf.float32)
[e1, W1] = tf.linalg.eig(A11)
e1 = tf.linalg.diag(e1)
A11r = tf.matmul(tf.matmul(W1, e1), tf.linalg.inv(W1))
A11: [[1. 3.]
[1. 1.]]
A11r: [[0.9999999 0.9999999]
[0.9999999 0.9999999]]

尝试使用 tf.linalg.function_name()
这是与你的结果相比的结果。

Input: A11
Output: <tf.Tensor: shape=(2, 2), dtype=float32, numpy=
array([[1., 3.],
       [1., 1.]], dtype=float32)>

Input: A11r
Output: <tf.Tensor: shape=(2, 2), dtype=complex64, numpy=
array([[1.0000001+0.j, 3.0000005+0.j],
       [1.       +0.j, 1.       +0.j]], dtype=complex64)>

以下是我遇到的错误,请检查是否有“import tensorflow as tf”:
  1. AttributeError:模块“tensortlow”没有属性“self_adjoint_eig”
  2. AttributeError:模块“tensorflow”没有属性“diag”
  3. AttributeError:模块“tensorflow”没有属性“matrix_inverse”

目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接