import numpy as np
import matplotlib.pyplot as plt
x1 = np.random.normal(size=1000000)
x2 = np.random.normal(size=1000000)
x3 = x1+x2
x = np.array([x1, x2, x3])
covar = np.zeros((3,3))
covar_est = np.array([[1,0,1],[0,1,1],[1,1,2]])
for i in range(3):
for j in range(3):
covar[i,j] = np.mean((np.mean(x[i])-x[i])*(np.mean(x[j])-x[j]))
print 'analytic covar:\n',covar_est
print '\ncomputed covar:\n',covar
print '\ndifference:\n',covar-covar_est
print 'analytic eigenvalues:\n',np.linalg.eigvals(covar_est)
print '\ncomputed eigenvalues:\n',np.linalg.eigvals(covar)
print '\ndifference:\n',np.linalg.eigvals(covar)-np.linalg.eigvals(covar_est)
M = np.linalg.eig(covar_est)[1].T
print "M:\n", M
print "\neigeinvalues on diagonals from M transform:\n", M.dot(covar_est.dot(M.T))
y = M.dot(x)
y.shape
covar_y = np.zeros((3,3))
for i in range(3):
for j in range(3):
covar_y[i,j] = np.mean((np.mean(y[i])-y[i])*(np.mean(y[j])-y[j]))
print '\ncomputed covar y:\n', covar_y
s1 = np.random.uniform(size=1000)
s2 = np.random.uniform(size=1000)
plt.figure()
plt.plot(s1, s2, 'x')
plt.show()
A = np.array([[1,2],[3,1]])
print "transform point by A="
print A
X = A.dot(np.array([s1,s2]))
plt.figure()
plt.plot(X[0],X[1], 'x')
plt.show()