python - Tensorflow 特征值/特征向量 (tf.linalg.eigh)
问题描述
我正在尝试使用 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)>
为什么这些不匹配?
解决方案
根据eigh的文档:
计算一批自伴随矩阵的特征分解。
推荐阅读
- mysql - 检查资金是否充足
- ios - 如何在 Cordova 中正确添加带有位置的 iOS 框架并从中创建插件?
- java - java - 如何在java spark中将多列分解为行数?
- prettier - 漂亮的配置错误,漂亮的不工作
- java - 混合 Hibernate 继承策略
- python - 如何将附加数据传递给序列化程序?
- haskell - Haskell Complex x 类型,其中 x 无法匹配实际类型 Int
- excel - MS 图形 API | 内容从 xlsx 转换为 pdf 时出错
- python - 如何从另一个 python 文件调用和打印项目
- c# - Android 应用无法从 Firebase 云通知打开