Как построить наибольшие и наименьшие собственные векторы для двумерных данных, используя numpy и matplotlib в python?

1

Резюме:

Я пытаюсь построить самые большие и самые маленькие собственные векторы 2-мерных данных в python, используя numpy и matplotlib. Я использовал числовые функции для ковариационной матрицы, собственных значений и собственных векторов. Позже я попытался построить собственные векторы с помощью колчана для заданных данных. Собственные векторы не отображаются правильно. Я предполагаю, что есть какая-то ошибка в том, как я строю сюжет колчана. Может ли кто-нибудь наставить меня на правильный путь?

Это мой код:

import numpy as np
import matplotlib.pyplot as plt
from numpy import array
from numpy import linalg as LA

# Assume that I loaded 'N' no of 2d points from a file and used
# np.cov() to find the below covariance matrix

# This is my covariance matrix obtained from 2 x N points
cov_mat = [[3407.3108669  1473.06388943]
           [1473.06388943 1169.53151003]]

eigen_values, eigen_vectors = LA.eig(cov_mat)

origin = [0, 0]

eig_vec1 = eigen_vectors[:,0]
eig_vec2 = eigen_vectors[:,1]

# This line below plots the 2d points
#plt.scatter(np_array[:,0], np_array[:,1])

plt.quiver(origin, eig_vec1, color=['r'], scale=21)
plt.quiver(origin, eig_vec2, color=['b'], scale=21)
plt.show()

Мой вывод:

Это мои 2D данные. Мы можем видеть, что самый большой собственный вектор должен быть в диагональном направлении. Но вектор не отображается правильно на графике.

Изображение 174551

Теги:
matplotlib
numpy
plot
eigenvector

1 ответ

2
Лучший ответ

Вы действительно используете колчан неправильно. X, Y, U и V должны быть отдельными аргументами (подробности см. В документации). С помощью plt.quiver(*origin, *eig_vec1, color=['r'], scale=21) (т.е. распаковка вашего источника и собственных векторов) вы должны получить желаемый результат.

import numpy as np
import matplotlib.pyplot as plt
from numpy import array
from numpy import linalg as LA

# Assume that I loaded 'N' no of 2d points from a file and used
# np.cov() to find the below covariance matrix

# This is my covariance matrix obtained from 2 x N points
cov_mat = [[3407.3108669,  1473.06388943],
           [1473.06388943, 1169.53151003]]

eigen_values, eigen_vectors = LA.eig(cov_mat)

origin = [0, 0]

eig_vec1 = eigen_vectors[:,0]
eig_vec2 = eigen_vectors[:,1]

print(eig_vec1)
print(eig_vec2)


# This line below plots the 2d points
#plt.scatter(np_array[:,0], np_array[:,1])

plt.quiver(*origin, *eig_vec1, color=['r'], scale=21)
plt.quiver(*origin, *eig_vec2, color=['b'], scale=21)
plt.show()

дает следующий сюжет:

Изображение 174551

Ещё вопросы

Сообщество Overcoder
Наверх
Меню