#!/usr/bin/env python3 # -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt from scipy.spatial import Voronoi, voronoi_plot_2d #initialisations clusters M = 20; N =100; #point par cluster K = N*M means = np.random.rand(M,2)*10 X = np.zeros((K,2)) plt.figure() cov = np.array([[1,0],[0,1]]) for m in range(M): xi = np.random.multivariate_normal(means[m,:],cov,N) X[m*N:(m+1)*N] = xi plt.plot(xi[:,0],xi[:,1],'+') plt.plot(means[:,0],means[:,1],'ob') mean= np.mean(X,axis=0) Y0 = np.random.multivariate_normal(mean, 10*cov, M) plt.show() Y0= means #triche plt.plot(Y0[:,0],Y0[:,1],'ok') plt.show() def LBG(X,Y0,eps=1e-5,maxiter=1000): Y = Y0.copy() old_dist = np.inf cluster_index = np.zeros(K,dtype=int) for l in range(maxiter): dist= 0; for k in range(len(X)): quant_min =np.inf for j in range(len(Y)): if np.linalg.norm(X[k]-Y[j])