IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Liste des objets les plus proches


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 8
    Par défaut Liste des objets les plus proches
    Bonjour,
    J'ai assez peu de connaissances en Python, mais je me lance dans un projet afin d'en apprendre un peu plus.
    J'ai quelques idées pour résoudre mon problème, mais toutes complexes, et je n'arrive pas à me lancer, donc un peu d'aide serait la bienvenue.

    Le principe est simple : j'ai créée deux classes, B et P, toutes deux ayant entre autres des attributs x et y. Je crée ensuite une classe W qui se construit à partir d'une instance de B et d'une liste d'instance P.
    Le but serait d'écrire une méthode de W retournant la liste de P ordonnée selon la distance à l'instance B.

    Ca ne me semble pas compliqué, mais je n'arrive pas à construire la fonction de façon à ce que cela retourne la liste des instances ordonnées et pas seulement les distances.

    J'espère avoir été assez clair.

    Merci d'avance pour votre aide !

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 743
    Par défaut
    Salut,

    Citation Envoyé par Herevian Voir le message
    Ca ne me semble pas compliqué, mais je n'arrive pas à construire la fonction de façon à ce que cela retourne la liste des instances ordonnées et pas seulement les distances.
    Peut être construire une liste de tuple (p, distance(b,p)) puis la trier par ordre croissant ou en rangeant (p, distance(b, p)) à chaque itération.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 8
    Par défaut
    Quelle intelligence et subtilité !

    Citation Envoyé par wiztricks Voir le message
    Salut,

    Peut être construire une liste de tuple (p, distance(b,p)) puis la trier par ordre croissant ou en rangeant (p, distance(b, p)) à chaque itération.

    - W
    Ah oui en effet ça pourrait le faire ! Merci beaucoup.

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    Citation Envoyé par Herevian Voir le message
    Quelle intelligence et subtilité !
    désolé, j'avais mal compris la question.

  6. #6
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Bonsoir

    Déjà, au vu de tes réponses lapidaires, tu bouffes de la distance euclidienne au petit-déjeuner. Pas la peine de t'en rappeler les principes.

    Tu n'en dis pas trop quant à ton problème. Tu as décidé de faire X classes (je ne suis pas sur que ce soit la bonne solution mais je fais avec).

    Si tes instances de classes B et P (au passage, ces noms ne sont pas terribles (politiquement correct. en vrai je pense "nuls à chier")) sont localisées, elles devraient hériter d'une classe "parent" qui saurait gérer la distance entre une instance et un "autre" objet localisé (attributs x et y).

    J'ai pensé à ça (python 2, à adapter en version 3):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    # coding: utf-8
     
    import math
    from random import randint
     
    NB_POINTS = 10
    XMAX, YMAX = 10, 10
     
    class Point(object):
     
        def __init__(self, xy):
            self.x = xy[0]
            self.y = xy[1]
     
        def __str__(self):
            return "(%d, %d)" % (self.x, self.y)
     
        def dist(self, other):
            dx, dy = self.x - other.x, self.y - other.y
            return math.hypot(dx, dy)
     
     
    class B(Point):
        pass
     
     
    class P(Point):
        pass
     
     
    def neighboors(B_instance, P_instances):
        distances = [(binst.dist(pinst), pinst) for pinst in P_instances]
        return [(t[1], t[0]) for t in sorted(distances)]
     
     
    binst = B((0, 0))
     
    # initialisation pour toujours avoir une distance nulle (verif)
    pinsts = [P((binst.x, binst.y))]
     
    # puis remplissage aléatoire
    for _ in range(NB_POINTS):
        pinsts.append(P((randint(-XMAX, XMAX), randint(-YMAX, YMAX))))
     
     
    result = neighboors(binst, pinsts)
    for inst, distance in result:
        print inst, "distance :", distance
    A l'usage, ça donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    pc41:Downloads pascal$ python neighboors.py
    (0, 0) distance : 0.0
    (2, 0) distance : 2.0
    (1, 5) distance : 5.09901951359
    (2, -5) distance : 5.38516480713
    (1, -6) distance : 6.0827625303
    (-3, -6) distance : 6.7082039325
    (-1, 7) distance : 7.07106781187
    (-9, -2) distance : 9.21954445729
    (-8, -6) distance : 10.0
    (10, -3) distance : 10.4403065089
    (-10, -5) distance : 11.1803398875
    pc41:Downloads pascal$

  7. #7
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    peut-être ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class W:
     
        def distances(self,p):
            return sorted(p,key=lambda point:(point.x-self.x)**2+(point.y-self.y)**2)

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 8
    Par défaut
    Mon problème se basait surtout sur la communication entre B et P (dans mon programme, Building et Power, W étant World, j'avais décidé de faire abstraction des noms complets pour se focaliser sur le problème). Avec la technique du tuple, et en partie celle que vous proposez, ça m'aide beaucoup. L'idée étant qu'après, chaque B puisse récupérer une information sur P en itérant sur la liste ordonnée.

    Tu as décidé de faire X classes (je ne suis pas sur que ce soit la bonne solution mais je fais avec).
    Qu'elle seraient les solutions plus efficaces ? J'avoue que je pars sur ça sans vraiment savoir si c'est optimal, c'est un premier jet.

  9. #9
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Citation Envoyé par Herevian Voir le message
    Qu'elle seraient les solutions plus efficaces ? J'avoue que je pars sur ça sans vraiment savoir si c'est optimal, c'est un premier jet.
    C'est très dur de te répondre sans connaître le contexte. En même temps, si c'est, comme tu dis, un premier jet, lance toi !

    L'intérêt (l'un des intérêts) de python est de pouvoir tester/expérimenter ! Le code est suffisamment "ramassé" pour qu'on n'ait aucun regret à jeter quelques lignes à la poubelle si ça "ne le fait pas". Et essayer autre chose. Surtout, ne te bloque pas sur un truc qui ne fonctionne pas ou pas comme il faudrait.

Discussions similaires

  1. Index des valeurs les plus proches
    Par ERCO503 dans le forum MATLAB
    Réponses: 2
    Dernier message: 10/07/2013, 11h40
  2. Liste de coordonnées les plus proche
    Par Serine73 dans le forum Requêtes
    Réponses: 5
    Dernier message: 07/05/2013, 08h53
  3. Mise en forme cellules des valeurs les plus proches
    Par fherolvera dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/02/2012, 10h57
  4. Liste des sessions les plus consommatrices
    Par orafrance dans le forum Contribuez
    Réponses: 0
    Dernier message: 30/12/2011, 14h34
  5. Liste des enregistrements les plus récents
    Par calagan99 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/03/2008, 11h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo