Pourquoi ma liste perd ses valeurs
geekat
Messages postés
228
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
A voir également:
- Pourquoi ma liste perd ses valeurs
- Liste déroulante excel - Guide
- Pourquoi sfr perd des clients - Guide
- Liste déroulante en cascade - Guide
- Liste code ascii - Guide
- Site dangereux liste - Guide
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.
Pour contrer cela, il suffit d'utiliser copy.
En cas de listes iou autres itérables imbriqués, il existe deepcopy dans la lib copy.
>>> 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.