Как построить наибольшие и наименьшие собственные векторы для двумерных данных, используя numpy и matplotlib в python? - PullRequest
0 голосов
/ 12 февраля 2019

Резюме:

Я пытаюсь построить наибольшие и наименьшие собственные векторы двумерных данных в 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 данные.Мы можем видеть, что самый большой собственный вектор должен быть в диагональном направлении.Но вектор не отображается правильно на графике.

Numpy_Image

1 Ответ

0 голосов
/ 12 февраля 2019

Ты действительно неправильно используешь колчан.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()

дает следующий график:

result of above code

...