首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tensorflow特征值/ EigenVector (tf.linalg.eigh)

Tensorflow特征值/ EigenVector (tf.linalg.eigh)
EN

Stack Overflow用户
提问于 2021-11-12 15:33:04
回答 1查看 407关注 0票数 1

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

进口tensorflow:

代码语言:javascript
复制
import tensorflow as tf # version 2.6.0

例如,以一个简单的矩阵为例

代码语言:javascript
复制
ex1 = tf.convert_to_tensor([[0,1],[-2,-3]],dtype=tf.float32)
print(ex1)

输出:

代码语言:javascript
复制
tf.Tensor(
[[ 0.  1.]
 [-2. -3.]], shape=(2, 2), dtype=float32)

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

代码语言:javascript
复制
eigVals, eigVects = tf.linalg.eigh(ex1)
print(tf.linalg.diag(eigVals),eigVects)

输出:

代码语言:javascript
复制
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,并且应该得到匹配的答案(在舍入误差范围内):

计算Av:

代码语言:javascript
复制
tf.matmul(ex1,eigVects)

输出:

代码语言:javascript
复制
<tf.Tensor: shape=(2, 2), dtype=float32, numpy=
array([[ 0.8944272 , -0.4472136 ],
       [-3.5777087 , -0.44721365]], dtype=float32)>

并计算Lv:

代码语言:javascript
复制
tf.matmul(tf.linalg.diag(eigVals),eigVects)

输出:

代码语言:javascript
复制
<tf.Tensor: shape=(2, 2), dtype=float32, numpy=
array([[-1.7888544 , -3.5777087 ],
       [ 0.8944273 , -0.44721365]], dtype=float32)>

为什么这些不匹配?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-12 20:58:18

根据艾格的文档

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69945346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档