【问题标题】:Tensorflow Eigenvalues / EigenVector (tf.linalg.eigh)Tensorflow 特征值/特征向量 (tf.linalg.eigh)
【发布时间】:2021-11-12 15:33:04
【问题描述】:

我正在尝试使用 TensorFlow 验证一个简单的特征值/特征向量问题。

导入张量流:

import tensorflow as tf # version 2.6.0

例如,取一个简单的矩阵

ex1 = tf.convert_to_tensor([[0,1],[-2,-3]],dtype=tf.float32)
print(ex1)

输出:

tf.Tensor(
[[ 0.  1.]
 [-2. -3.]], shape=(2, 2), dtype=float32)

然后我使用 tf.linalg.eigh 计算特征值和特征向量:

eigVals, eigVects = tf.linalg.eigh(ex1)
print(tf.linalg.diag(eigVals),eigVects)

输出:

tf.Tensor(
[[-4.         0.       ]
 [ 0.         1.0000001]], shape=(2, 2), dtype=float32) tf.Tensor(
[[ 0.4472136  0.8944272]
 [ 0.8944272 -0.4472136]], shape=(2, 2), dtype=float32)

现在,由于 A 的特征值和特征向量定义为 Av = Lv,我可以计算 Av 和 Lv 并且应该得到匹配的答案(在舍入误差内):

计算平均值:

tf.matmul(ex1,eigVects)

输出:

<tf.Tensor: shape=(2, 2), dtype=float32, numpy=
array([[ 0.8944272 , -0.4472136 ],
       [-3.5777087 , -0.44721365]], dtype=float32)>

计算Lv:

tf.matmul(tf.linalg.diag(eigVals),eigVects)

输出:

<tf.Tensor: shape=(2, 2), dtype=float32, numpy=
array([[-1.7888544 , -3.5777087 ],
       [ 0.8944273 , -0.44721365]], dtype=float32)>

为什么这些不匹配?

【问题讨论】:

    标签: python tensorflow eigenvalue eigenvector


    【解决方案1】:

    根据eigh的文档:

    计算一批自伴随矩阵的特征分解。

    【讨论】:

    • 哇...完全错过了。谢谢。
    猜你喜欢
    • 2014-05-11
    • 2019-04-16
    • 1970-01-01
    • 2019-04-27
    • 2017-02-21
    • 1970-01-01
    • 1970-01-01
    • 2018-08-04
    • 2012-08-08
    相关资源
    最近更新 更多