import numpy as np n = 10000 x1 = np.random.normal(0,1,n) x2 = np.random.normal(0,1,n) x3 = x1+x2 X = [x1,x2,x3] c = np.cov(X) print(c) # Covariance matrix: # [[ 1.00552305 -0.00540942 1.00011363] # [-0.00540942 1.00327819 0.99786877] # [ 1.00011363 0.99786877 1.9979824 ]] e = np.linalg.eig(c) print(e[0]) # Eigenvalues: # [ 2.99277382e+00 1.00136031e+00 1.76529821e-15] print(e[1]) # Eigenvectors # [[-0.40445603 0.70928273 0.57735027] # [-0.41202885 -0.70491056 0.57735027] # [-0.81648487 0.00437217 -0.57735027]] # Cov(y) = M * Cov(x) * M^T cy = np.dot(np.dot(e[1].T,c), e[1].T) print(cy) # # [[ 2.61908171 0.80509741 -0.50471862] # [ 0.80509741 0.98241759 0.30643185] # [-0.50471862 0.30643185 0.38716296]]