Aller au contenu

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


angelV

Messages recommandés

Posté(e)

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

  • E-Bahut
Posté(e)

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.

 

 

 

  • E-Bahut
Posté(e)

[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 ?

  • E-Bahut
Posté(e)
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 ?

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

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