首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >找出一组特征向量对应的特征值

找出一组特征向量对应的特征值
EN

Stack Overflow用户
提问于 2020-01-02 19:29:03
回答 2查看 267关注 0票数 0

我使用Python解决了这一任务的大部分问题,但不确定如何输入(甚至理解)其余的信息。您不应该找到给定一些特征值的特征向量吗?因此,它出现在以下情况下:

设对称3×3矩阵A = ((1 2 1), (2 5 0), (1 0 5))

如果A有以下三个特征向量,则找出三个相应的特征值:

v1 = ((-5), (2), (1))v2 = ((0), (-1), (2))v3 = ((1), (2), (1))

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-02 20:25:36

给定矩阵arr和向量vec,如果vecarr的特征向量,那么:

代码语言:javascript
复制
np.dot(arr, vec) == lambda_ * vec

因此,遍历np.dot(arr, vec) / vec的所有值(最终忽略作为潜在特征向量的零向量,并将电位除法的误差抑制为零),将显示特征值:

代码语言:javascript
复制
import numpy as np


def find_eigenvalue(arr, vec):
    result = None
    if not np.all(np.isclose(vec, 0.0)):
        with np.errstate(divide='ignore', invalid='ignore'):
            for x, y in zip(np.dot(arr, vec), vec):
                if np.isclose(y, 0.0) and np.isclose(x, 0.0):
                    continue
                if result is None:
                    result = x / y
                elif not np.isclose(result, x / y):
                    result = None
                    break
    return result

如预期的那样工作:

代码语言:javascript
复制
print(find_eigenvalue(arr, np.array([0, 0, 0])))
# None
print(find_eigenvalue(arr, np.array([1, 0, 0])))
# None
print(find_eigenvalue(arr, np.array([0, 1, 0])))
# None
print(find_eigenvalue(arr, np.array([0, 0, 1])))
# None
print(find_eigenvalue(arr, np.array([0, -1, 2])))
# 5
print(find_eigenvalue(arr, np.array([-5, 2, 1])))
# -0.0
print(find_eigenvalue(arr, np.array([1, 2, 1])))
# 6.0

最后,请注意,np.linalg.svd()还将计算所有这些:

代码语言:javascript
复制
u, s, vh = np.linalg.svd(arr)

s包含特征值,uvh包含特征向量(更准确地说,u中的左奇异特征向量和vh中右奇异特征向量的hermitian )。

票数 1
EN

Stack Overflow用户

发布于 2020-01-02 19:40:06

考虑一下特征向量的定义。由矩阵A表示的线性变换的特征向量v是一个仅在幅度上而不是方向上变化的向量,当这种线性变换应用于它时。特征向量的标量变化是其特征值。你有一个线性变换,你得到了它的特征向量,为了找到特征值,你所需要做的就是把这个变换应用到特征向量上,并根据每个特征向量的标量来确定标量。

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

https://stackoverflow.com/questions/59568960

复制
相关文章

相似问题

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