Search code examples
pythonnumpymatrixcovariancesvd

How to calculate sigma_1 and sigma_2 with Covariance Matrix


I'm reading this article.

In the "Covariance matrix & SVD" section,
there are two \sigmas, which are \sigma_1 and \sigma_2.
Those values are 14.4 and 0.19, respectively.
How can I get these values?
I already calculated the covariance matrix with Numpy:

import numpy as np

a = np.array([[2.9, -1.5, 0.1, -1.0, 2.1, -4.0, -2.0, 2.2, 0.2, 2.0, 1.5, -2.5], 
               [4.0, -0.9, 0.0, -1.0, 3.0, -5.0, -3.5, 2.6, 1.0, 3.5, 1.0, -4.7]])

cov_mat = (a.shape[1] - 1) * np.cov(a)
print(cov_mat)

# b = np.std(a, axis=1)**0.5
b = (a.shape[1] - 1) * np.std(a, axis=1)**0.5
# b = np.std(cov_mat, axis=1)
# b = np.std(cov_mat, axis=1)**0.5
print(b)

The result is:

[[ 53.46  73.42]
 [ 73.42 107.16]]
[15.98102431 19.0154037 ]

No matter what I do, I can't get 14.4 and 0.19. Are they just wrong values?

Please help me. Thank you in advance.


Solution

  • Don't know why you "un-sampled' your covariance, but the original np.cov output is what you want to get eigenvalues of:

    np.linalg.eigvalsh(np.cov(a))
    
    Out[]: array([ 0.19403958, 14.4077786 ])