Pourquoi ma liste perd ses valeurs

Fermé
geekat Messages postés 228 Date d'inscription vendredi 31 juillet 2015 Statut Membre Dernière intervention 24 février 2017 - 21 oct. 2016 à 16:57
 joudor - 22 oct. 2016 à 18:19
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

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.
0