from numpy import *

# on génère un nuage de points dans R^2
N = 400
X = random.randn(N,2) # distribution normale 0,1 avec tirages indépendants

T = array([[1, 2], [-1, 0.5]]) # matrice quelconque 2x2 
X = dot(X,T) # transforme X linéairement

# Prétraitement des données X

# 1 recentrer en zéro (soustaction des moyennes)
Xc = zeros(X.shape)
for k in range(0,2):
    Xc[:,k] = X[:,k] - mean(X[:,k])

U, s, Vs = linalg.svd(X, full_matrices=True)

