In [2]:
import numpy as np

In [23]:
cov = np.array([[5, -3, 0],[-3, 5, 0],[0, 0, 4]])
cov


Out[23]:
array([[ 5, -3,  0],
       [-3,  5,  0],
       [ 0,  0,  4]])

In [24]:
evals, evecs = np.linalg.eig(cov)

In [25]:
evals


Out[25]:
array([ 8.,  2.,  4.])

In [26]:
evecs


Out[26]:
array([[ 0.70710678,  0.70710678,  0.        ],
       [-0.70710678,  0.70710678,  0.        ],
       [ 0.        ,  0.        ,  1.        ]])

In [84]:
x=np.array([[4,0,2]])
x


Out[84]:
array([[4, 0, 2]])

In [85]:
components = np.array([evecs[:,0], evecs[:,2]]).T #these are the 2 vecs w/ most variance
U = components
U


Out[85]:
array([[ 0.70710678,  0.        ],
       [-0.70710678,  0.        ],
       [ 0.        ,  1.        ]])

In [86]:
x2d = np.dot(U.T,x.T).T
x2d


Out[86]:
array([[ 2.82842712,  2.        ]])

In [87]:
UUT = np.dot(U,U.T)
UUT


Out[87]:
array([[ 0.5, -0.5,  0. ],
       [-0.5,  0.5,  0. ],
       [ 0. ,  0. ,  1. ]])

In [89]:
x3d = np.dot(UUT, x.T)
x3d.T


Out[89]:
array([[ 2., -2.,  2.]])