Calcul de la matrice des distances L2 sous forme vectorielle pour une solution utilisant le voisinage d’ordre k (K-nearest neighbor). Temps de calcul divisé par 100 par rapport à l’utilisation de boucles!
def compute_distances_no_loops(self, X): """ Compute the distance between each test point in X and each training point in self.X_train using no explicit loops. """ num_test = X.shape[0] num_train = self.X_train.shape[0] dists = np.zeros((num_test, num_train)) # Déploiement du carré dans L2 et écriture sous forme matricielle # ms somme des carrés # mp produit croisé x_2 = np.sum(np.square(X), axis = 1) mx_2 = np.array([x_2,]*num_train) xt_2 = np.sum(np.square(self.X_train), axis = 1) mxt_2 = np.array([xt_2,]*num_test) ms = mx_2.T + mxt_2 mp = np.matmul(X,np.transpose(self.X_train)) dists = np.sqrt(ms - 2*mp) return dists