Je n'arrive pas à comparer 3 chiffres à la fois
Résolu
geekat
Messages postés
242
Statut
Membre
-
geekat Messages postés 242 Statut Membre -
geekat Messages postés 242 Statut Membre -
Bonjour,
J'ai fait un exemple simple pour comparer 3 chiffres par 3 et qui marche.
Le but est de chercher le minimum entre 3 chiffres à la fois.
0 1 2 3 4 5 6
Maintenant, je souhaite implémenter ça dans mon code, qui est en fait l'algorithme de K-means. Je suis à la 2ème étape :
Le problème c'est que ça ne marche que pour K = 2 alors que dans l'exemple ça marche pour tout K. (ici il ne compare que pour les 2 premiers nombre)
Qu'est-ce qui ne va pas ?
Merci
J'ai fait un exemple simple pour comparer 3 chiffres par 3 et qui marche.
Le but est de chercher le minimum entre 3 chiffres à la fois.
0 1 2 3 4 5 6
i = 0 K = 3 while i <7: if min(i,i+1) = i: print("Le min est",i) else: print("le min est",i+1) i = i +K Le min est 0 Le min est 3 Le min est 6
Maintenant, je souhaite implémenter ça dans mon code, qui est en fait l'algorithme de K-means. Je suis à la 2ème étape :
i = 0 K = 3 for pt in points_restants: for c in centres_initiaux: distance_euclidienne = round(sqrt( (c[0]-pt[0])**2 + (c[1]-pt[1])**2 ),2) print("de(",c,",",pt, ") = ", distance_euclidienne) liste_distances.append(distance_euclidienne) ## Liste des distances minimales #distance_minimale = min (liste_distances[i],liste_distances[i+1]) # Pt le plus proche de c = ça marche pour K=2 if min (liste_distances[i],liste_distances[i+1]) == liste_distances[i]: distance_minimale = liste_distances[i] else: distance_minimale = liste_distances[i+1] i = i+3 print(distance_minimale)
Le problème c'est que ça ne marche que pour K = 2 alors que dans l'exemple ça marche pour tout K. (ici il ne compare que pour les 2 premiers nombre)
Qu'est-ce qui ne va pas ?
Merci
A voir également:
- Je n'arrive pas à comparer 3 chiffres à la fois
- Ai suite 3 - Télécharger - Optimisation
- Tv lg voyant rouge clignote 3 fois - Forum Ecran
- 3 emoji - Forum Mail
- :3 emoji ✓ - Forum Mail
- Tous les code possible de 0 à 9 (4 chiffres ) liste - Forum Jeux vidéo
1 réponse
Salut,
Disclaimer : je ne suis pas un pro de Python, mais puisque ton message n'a pas eu de réponses, je me lance :-)
Ton exemple ne marche pas sur une liste arbitraire. Si on faisait manuellement, il faudrait comparer les 2 premiers éléments et obtenir le plus petit, et ensuite comparer cet élément au 3ème et déterminer le plus petit.
Là tu utilises la fonction Python min().
Or, la fonction standard min() accepte un tuple ou une liste (un objet itérable) avec un nombre arbitraire d'éléments et renvoie le plus petit.
https://docs.python.org/2/library/functions.html#min
Donc, tu peux successivement mettre tes groupes de 3 éléments dans une liste et les passer à min().
Cet exemple fonctionne pour moi, en créant la liste à la volée :
donne :
Dal
Disclaimer : je ne suis pas un pro de Python, mais puisque ton message n'a pas eu de réponses, je me lance :-)
Ton exemple ne marche pas sur une liste arbitraire. Si on faisait manuellement, il faudrait comparer les 2 premiers éléments et obtenir le plus petit, et ensuite comparer cet élément au 3ème et déterminer le plus petit.
Là tu utilises la fonction Python min().
Or, la fonction standard min() accepte un tuple ou une liste (un objet itérable) avec un nombre arbitraire d'éléments et renvoie le plus petit.
https://docs.python.org/2/library/functions.html#min
Donc, tu peux successivement mettre tes groupes de 3 éléments dans une liste et les passer à min().
Cet exemple fonctionne pour moi, en créant la liste à la volée :
liste_distances = [151, 30, 2, 67, 8, 103, 10, 36, 78] i = 0 k = 3 # le min des elements 0, 1, 2 est : 2 print min([liste_distances[idx] for idx in range(i,i+k)]) # min des elements 3, 4, 5 est : 8 i = i + k print min([liste_distances[idx] for idx in range(i,i+k)]) # min des elements 6, 7, 8 est : 10 i = i + k print min([liste_distances[idx] for idx in range(i,i+k)])
donne :
2
8
10
Dal
geekat
Messages postés
242
Statut
Membre
Merci beaucoup, ça marche bien :)