2024-05-14 12:49:36 发布
网友
如何找出对应于特定特征值的特征向量?
我有一个随机矩阵(p),其特征值之一是1。我需要找到对应于特征值1的特征向量。
scipy函数scipy.linalg.eig返回特征值和特征向量的数组。
D, V = scipy.linalg.eig(P)
这里D(值数组)和V(向量数组)都是向量。
一种方法是在D中进行搜索,在V中提取相应的特征向量。有更简单的方法吗?
如果您正在寻找对应于一个特征值的一个特征向量,那么使用scipy.sparse.linalg implementation of the eig function可能会更有效。 它允许查找固定数量的特征向量,并围绕特定值移动搜索。例如,您可以:
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)]返回一个二维数组——数组的每一行都是特征值为1.0的特征向量。
V[near(D, 1.0)]
如果您正在寻找对应于一个特征值的一个特征向量,那么使用scipy.sparse.linalg implementation of the eig function可能会更有效。 它允许查找固定数量的特征向量,并围绕特定值移动搜索。例如,您可以:
特征向量是V列:
所以对应于特征值1.0的特征向量是
由于可以有多个具有相同特征值的特征向量,
V[near(D, 1.0)]
返回一个二维数组——数组的每一行都是特征值为1.0的特征向量。相关问题 更多 >
编程相关推荐