Pourquoi ma liste perd ses valeurs
geekat
Messages postés
223
Date d'inscription
Statut
Membre
Dernière intervention
-
joudor -
joudor -
Bonjour,
J'essaie d'implémenter le K-means.
Je suis à l'étape où je dois affecter chaque point (le plus proche d'un centre) à une classe.
Les premiers résultats sont corrects, j'ai répété l'opération une fois, et là y a un problème :
la classe 1 qui est une liste perd ses valeurs qui se retrouvent dans la classe 3.
A noter que K = 3 ici donc 3 classes.
Je ne comprends pas pourquoi ça ne marche qu'une fois, pourquoi la classe 1 se vide, pourquoi la classe 3 prend ses valeurs.

Ce qui est en jaune sur cette image est la classe 1 qui avaient des valeurs correctes puis qui s'est finalement vidées, ses valeurs on les retrouve dans la classe 3.
Merci
J'essaie d'implémenter le K-means.
Je suis à l'étape où je dois affecter chaque point (le plus proche d'un centre) à une classe.
Les premiers résultats sont corrects, j'ai répété l'opération une fois, et là y a un problème :
la classe 1 qui est une liste perd ses valeurs qui se retrouvent dans la classe 3.
A noter que K = 3 ici donc 3 classes.
Je ne comprends pas pourquoi ça ne marche qu'une fois, pourquoi la classe 1 se vide, pourquoi la classe 3 prend ses valeurs.

Ce qui est en jaune sur cette image est la classe 1 qui avaient des valeurs correctes puis qui s'est finalement vidées, ses valeurs on les retrouve dans la classe 3.
Merci
1 réponse
-
Sans plus d'informations ou de code, difficile de deviner, même si je pense que tu dois passer en paramètres tes listes à tes classes, et comme les listes gardent toujours la même référence, c'est ce qui te pose problème.
>>> a = [1, 2, 3, 4, 5] >>> b = a >>> b.remove(3) >>> a [1, 2, 4, 5]
Pour contrer cela, il suffit d'utiliser copy.>>> a = [1, 2, 3, 4, 5] >>> b = a.copy() >>> b.remove(3) >>> a [1, 2, 3, 4, 5]
En cas de listes iou autres itérables imbriqués, il existe deepcopy dans la lib copy.