如何找出與特定特徵值對應的特徵向量?如何找出與矩陣的特定特徵值對應的特徵向量?
我有一個隨機矩陣(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中提取相應的特徵向量。是否有更簡單的方法?
如果您正在尋找一個對應於一個特徵值的特徵向量,使用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的特徵向量。
它返回P的左特徵值嗎? – AIB 2012-08-14 15:47:07
我認爲你的意思是eig不是eig。我嘗試了scipy.sparse.linalg.eigs(P,k = 1,sigma = 1),但是引發了一個異常 - raise NotImplementedError(「尚未支持移位特徵問題」) – AIB 2012-08-14 15:52:31
修復了eig - > eigs。移位的特徵問題在我使用的版本中實現:scipy 0.10.1 – 2012-08-16 08:26:04