Covariance, Correlation, and eigenvalues
Covariance
$\sigma_{ij} = \frac{1}{N} \sum_{k=1}^{N} \left(x_i^{(k)} - \mu_i\right)\left(x_j^{(k)} - \mu_j\right)$
import numpy as np
x = np.array([[1, 2], [1, 1], [2, 0]])
cov_mat = np.cov(x.T)
cov_mat
array([[ 0.33333333, -0.5 ],
[-0.5 , 1. ]])
Correlation
Pearson product-moment correlation coefficients.
$\rho_{ij} = \frac{\sigma_{ij}}{\sigma_{ii}\sigma_{jj}}$
np.corrcoef(x.T)
array([[ 1. , -0.8660254],
[-0.8660254, 1. ]])
Eigenvalues and eigenvectors
Two methods available np.linalg.eigh and np.linalg.eig, use eigh which is designed for Hermitian matrices which always returns real eigenvalues. Not guaranteed with the former.
Hermitian matrix is equal to its own conjugate transpose.
eigen_vals, eigen_vecs = np.linalg.eigh(cov_mat)
print('\nEigenvalues \n%s' % eigen_vals)
print('\nEigenvectors \n%s' % eigen_vecs)
Eigenvalues
[0. 2.]
Eigenvectors
[[-0.70710678 -0.70710678]
[-0.70710678 0.70710678]]