Ошибка вычисления собственных значений и векторов в питоне - PullRequest
1 голос
/ 06 октября 2019

Я пытаюсь получить собственные векторы и значения любой матрицы 'X' в определенном формате. Я использовал функцию linalg для получения собственных пар, но ожидаемый формат вывода отличается от моего результата. Например, v и e обозначают собственные значения и собственные векторы. v1 = 1, e1 = [1,0,0], v2 = 2, e2 = [0,1,0], v3 = 3, e3 = [0,0,1].

Таким образом, в этом примере собственные пары матрицы X должны быть Ep =[(1, [1,0,0]) (2, [0,1,0]), (3, [0,0,1])]. Здесь P[0] представляет первую собственную пару (1,[1,0,0]), где собственное значение равно 1, а собственный вектор равен [1,0,0].

Не могли бы вы помочь мне кодировать эту часть дальше?

e,v = np.linalg.eigh(X)

1 Ответ

0 голосов
/ 06 октября 2019

np.linalg.eigh

Во-первых, следует отметить, что np.linalg.eigh вычисляет собственные значения эрмитовой матрицы - это не будет применяться для всех матриц. Если вы хотите вычислить собственные значения любой матрицы X, вам, вероятно, следует переключиться на что-то вроде np.linalg.eig:

import numpy as np

L = np.diag([1,2,3])
V = np.vstack(([1,0,0],[0,1,0],[0,0,1]))

# X = V@L@V.T (eigendecomposition)
X = V@L@V.T

w,v = np.linalg.eig(X)
assert (np.diag(w) == L).all()
assert (v == V).all()

Собственные пары

Чтобы построить собственные пары, просто используйте некоторое понимание списка:

import numpy as np

# X = V@L@V.T (eigendecomposition)
X = np.diag([1,2,3])

w,v = np.linalg.eig(X)

Ep = [(val,vec.tolist()) for val,vec in zip(w,v)]

Наслаждайтесь!

...