Aller au contenu

Python : les k plus proches voisins pour le 29/05/20


angelV

Messages recommandés

Bonjour,

Nouveau travail donné par mon professeur aujourd'hui.

Il n'est pas très compliqué mais je bloque à la question 2.2 et 2.3...

Pourriez-vous m'aider ? Merci d'avance ! 

Voici mon début de programme...

table = [['Clark', 6, 17, 'Chevalier'],
         ['Martheen', 8, 16, 'Chevalier'],
         ['Mulen', 4, 0, 'Chevalier'],
         ['Louly', 14, 4, 'Chevalier'],
         ['Phark', 13, 11, 'Chevalier'],
         ['Tom', 12, 16,'Chevalier'],
         ['Karl', 12, 7, 'Chevalier'],
         ['Korg', 1, 6, 'Chevalier'],
         ['Axal', 4, 20,'Chevalier'],
         ['Tim', 6, 17, 'Chevalier'],
         ['Fanks', 2, 6, 'Chevalier'],
         ['louli', 5, 18,'Chevalier'],
         ['Ario', 10, 18, 'Chevalier'],
         ['Marko', 6, 19, 'Chevalier'],
         ['Thoms', 5, 9,'Chevalier'],
         ['Risk', 9, 17, 'Chevalier'],
         ['Loumi', 20, 5, 'Chevalier'],
         ['Quarx', 18, 20,'Chevalier'],
         ['Lomo', 16, 19, 'Fantassin'],
         ['Cargo', 0, 5, 'Fantassin'],
         ['Syl', 12, 5,'Fantassin'],
         ['Faq', 12, 4, 'Fantassin'],
         ['Tobby', 4, 0, 'Fantassin'],
         ['Helen', 1, 14,'Fantassin'],
         ['Lis', 10, 14, 'Fantassin'],
         ['Syl', 4, 16, 'Fantassin'],
         ['Fancy', 8, 3,'Fantassin'],
         ['Phyl', 13, 1, 'Fantassin'],
         ['Sal', 1, 16, 'Fantassin'],
         ['Wherk', 4, 6,'Fantassin'],
         ['Fool', 10, 17, 'Fantassin'],
         ['Max', 15, 13, 'Fantassin'],
         ['Til', 12, 0,'Fantassin']]

cible =  ['Cible', 6, 11]

def distance_cible(x_1, y_1, x_2, y_2) :
    distance = abs(x_2 - x_1) + abs(y_2 - y_1)
    return distance

def liste_distances_triees(table, cible) :
    table_distance = []
    for element in table :
        table_distance.append((distance_cible(element[1], element[2], cible[1], cible[2]), element[3]))
    table_distance_triee = .................................
    return table_distance_triee

Exo 4 p1.png

Exo 4 p2.png

Modifié par angelV
Lien vers le commentaire
Partager sur d’autres sites

  • E-Bahut

Bonsoir,

Réponse partielle...

2.2 L'instruction crée la liste des distances avec, en plus, le type de personnages.

2.3 A condition de compléter  la ligne incomplète par

table_distance_triee = sorted(table_distance)

la fonction retourne les liste triées de la plus petite distance à la plus grandes.

Pour n'avoir que les k premiers de la liste, rajouter k=7, par exemple après cible =  ['Cible', 6, 11] , et compléter par

return(table_distance_triee[0:k]).

Ci-joint le script que j'ai testé.

Algorithme kNN.py

Pour ce soir ce sera tout, mais je pense que la suite devrait poser moins de problème. Comme d'habitude, j'attends tes commentaires.

 

 

 

Lien vers le commentaire
Partager sur d’autres sites

  • E-Bahut

[0:k] pour n'afficher que les k premiers termes de la liste triée, cf. question 2.3. Il faut prendre [0:k] car l'indice du premier terme de la liste est 0, et dans une énumération, le décompte s'arrête au dernier indice -1. Donc on affiche les termes d'indice 0, 1, 2,..., k-1, soit bien les k premiers.

Comme j'avais déjà soulevé la question dans un fil précédent, j'aimerais bien savoir pour quel motif les concepteurs de Python ont procédé ainsi pour l'indice maximum. Peut-être à cause du démarrage à 0 ?

Lien vers le commentaire
Partager sur d’autres sites

  • E-Bahut
il y a 39 minutes, angelV a dit :

Je pense aussi car je n'en sais rien... 

Tu ne peux pas poser la question à ton prof ?

Cela dit, suivant les logiciels de programmation, pour les éléments indicés, l'indice du premier est, une fois 0, une fois 1, certains mêmes proposent en option de choisir l'indice initial. Par contre, pour les boucles, sauf à éluder l'indice de départ et donc à postuler forcément qu'il est nul, je ne vois pas l'intérêt, dans la suite [1;n], à se limiter à n-1.

Autre chose, tu ne m'as pas dit comment tu as terminé cet exercice, ni si ce que je t'ai envoyé correspondait aux attentes de l'énoncé.

P.S. : J'ai vu ta nouvelle demande, mais je ne suis pas sûr de pouvoir t'aider, car je n'ai jamais travaillé avec des ouvertures-fermetures de fichiers, même avec d'autres logiciels. Bien sûr, je regarderai, mais, vu ce qui précède, je n'écrirai pas dans ton post si je n'ai pas de réponse adéquate. Peut-être qu'un "vrai" informaticien regardera ce fil, avis à Etienne9 ?

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

Chargement
×
×
  • Créer...
spam filtering
spam filtering