Je n'arrive pas à comparer 3 chiffres à la fois
Résolu
geekat
Messages postés
228
Date d'inscription
Statut
Membre
Dernière intervention
-
geekat Messages postés 228 Date d'inscription Statut Membre Dernière intervention -
geekat Messages postés 228 Date d'inscription Statut Membre Dernière intervention -
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
- Tous les code possible de 0 à 9 (4 chiffres ) liste - Forum Programmation
- Tous les code possible de 0 à 9 (4 chiffres ) - Forum Jeux vidéo
- :3 emoji ✓ - Forum Mail
- 3 emoji - Forum Mail
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
228
Date d'inscription
Statut
Membre
Dernière intervention
Merci beaucoup, ça marche bien :)