如何找出对应于特定特征值特征向量?
我有一个随机矩阵(P),特征值,其中为1。我需要找到对应于特征值1的特征向量中的一个。
的SciPy的函数scipy.linalg.eig返回特征向量的阵列。
D, V = scipy.linalg.eig(P)
这里d(值的阵列)和V(矢量的阵列)是这两种载体。
一种方法是做d搜索和提取V.对应的特征向量是否有更简单的方法?
如何找出对应于特定特征值特征向量?
我有一个随机矩阵(P),特征值,其中为1。我需要找到对应于特征值1的特征向量中的一个。
的SciPy的函数scipy.linalg.eig返回特征向量的阵列。
D, V = scipy.linalg.eig(P)
这里d(值的阵列)和V(矢量的阵列)是这两种载体。
一种方法是做d搜索和提取V.对应的特征向量是否有更简单的方法?
如果您正在寻找对应于一个特征值特征向量一个,它可能是更有效使用的EIG功能scipy.sparse.linalg实施 。 它可以寻找一个固定数目的特征向量和转向围绕一个特定值的搜索。 你可以为实例做:
values, vectors = scipy.sparse.linalg.eigs(P, k=1, sigma=1)
import numpy as np
import numpy.linalg as linalg
P = np.array([[2, 0, 0], [0, 1, 0], [0, 0, 3]])
D, V = linalg.eig(P)
print(D)
# [ 2. 1. 3.]
特征向量为V的列:
V = V.T
for val, vec in zip(D, V):
assert np.allclose(np.dot(P, vec), val*vec)
这样的特征向量对应于特征值1.0是
def near(a, b, rtol = 1e-5, atol = 1e-8):
return np.abs(a-b)<(atol+rtol*np.abs(b))
print(V[near(D, 1.0)])
# [[ 0. 1. 0.]]
因为可以有多于一个的特征向量具有相同的特征值, V[near(D, 1.0)]
返回一个2维阵列-的阵列的每一行是具有1.0的本征值的本征向量。