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

Calcul scientifique Python Discussion :

représenter un graphe


Sujet :

Calcul scientifique Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2020
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2020
    Messages : 17
    Points : 13
    Points
    13
    Par défaut représenter un graphe
    Bonsoir,besoin d'aide svp
    j'ai un DM à faire et j'arrive pas à finaliser.
    le but de l'exercice est de lire un graphe orienté contenu dans un fichier à partir de python et de le représente en matrice adjacente.
    le fichier test.txt est le suivant
    """
    4
    5
    3 1 25
    1 0 12
    2 0 -5
    0 1 0
    2 1 7

    """"
    cela correspond à un graphe contenant 4 sommets numérotés de 0 à 3 (numérotation contiguë), et 5 arcs (3,1),
    (1,0), (2,0), (0,1), (2,1) de valeurs respectives 25, 12, -5, 0 et 7


    j'ai passé toute la journée dessus mais le seul résultat que j'ai construit les éléments 1 à 1 et donc réinitialise tout quand je run. ça n'a pas l'air trop compliqué quand on regarde mais j'ai passé toute la journée dessus.
    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
    import numpy as np
    with open("test.txt",'r') as fic:
        content=fic.readline()
        b=int(content)
        arrête=5
        mat=np.zeros((b,b))
        for i in range(arrête-1):
            mat[i,i]=0
        c=list(fic.readlines()[5])
        valeur=''
        cmp=3
        while c[cmp] != '\n':
            valeur+=c[cmp]
            cmp+=1
        x=int(c[0])
        y=int(c[2])
        z=int(valeur)
        mat[x,y]=z
        print (mat)

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    juin 2008
    Messages
    17 669
    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 : 17 669
    Points : 30 495
    Points
    30 495
    Par défaut
    Salut,

    Citation Envoyé par cedrickab Voir le message
    ça n'a pas l'air trop compliqué quand on regarde mais j'ai passé toute la journée dessus.
    Essayer de séparer les opérations, lire correctement le fichier, mettre en forme les données,... sont préalables à leur utilisation pour.

    lire correctement le fichier, c'est lire la première ligne (le nombre de sommets), la deuxième ligne (le nombre d'arcs et aussi le nombre de lignes suivantes à lire) et lire les arcs.

    Vous pourriez fabriquer une fonction qui récupère le nom du fichier en paramètres et qui retourne le nombre de sommets et la liste correspondant aux arcs sous la forme d'un tuple à 3 éléments.

    Une fois que cette fonction "fonctionne", vous pourrez vous servir des données retournées pour initialiser le tableau numpy et le remplir.

    note: vous n'êtes pas oligé de passer par une fonction et vous contenter d'une étape qui renseigne une variable donnant le nombre de sommets et une autre donnant la liste des arcs. Vous affichez le résultat, vérifiez que c'est ce qui est attendu et ensuite vous passez à l'étape suivante.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2020
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2020
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    lire correctement le fichier, c'est lire la première ligne (le nombre de sommets), la deuxième ligne (le nombre d'arcs et aussi le nombre de lignes suivantes à lire) et lire les arcs.
    - W
    Bonjour, je pense que c'est ce que j'ai fait non?
    j'ai lu la première ligne et la deuxième , après j'ai un problème pour remplir la matrice en même temps avec les tout les arcs.
    j'arrive juste à remplir un arc, y'aurai pas un moyen pour que j'en fasse une fonction ? par exemple pour trois arc par exemple il va faire 3 matrices différentes et au final je les addition pour avoir une matrice finale?

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    juin 2008
    Messages
    17 669
    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 : 17 669
    Points : 30 495
    Points
    30 495
    Par défaut
    Citation Envoyé par cedrickab Voir le message
    Bonjour, je pense que c'est ce que j'ai fait non?
    j'ai lu la première ligne et la deuxième , après j'ai un problème pour remplir la matrice en même temps avec les tout les arcs.
    Vous avez voulu tout mélanger et vous utilisez des données lues sans avoir vérifié que çà contenait bien ce que vous en attendiez.

    Çà commence ligne 5 ou vous forcez "arrête=5" plutôt que de lire la valeur contenue dans le fichier, puis ligne 9 vous vous retrouver avec un c qui contient n'importe quoi (preuve que vous ne l'avez pas regardé).

    En plus vous n'êtes pas "logique", si vous vouliez renseigner les 5 arcs, il y aurait une boucle qui prend chaque arc lu et ajoute le poids à l'arrête de al matrice.
    Pas de boucle, un seul arc renseigné, normal non?


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

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    novembre 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : novembre 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    J'ai modifié votre code comme suit. J'ai obtenu la matrice suivante:
    [[ 0. 0. 0. 0.]
    [12. 0. 0. 0.]
    [-5. 7. 0. 0.]
    [ 0. 25. 0. 0.]]

    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
     
     
    import numpy as np
    with open("test.txt",'r') as fic:
        content=fic.readlines()
        b=int(content[0])
        arrête=int(content[1])
        mat=np.zeros((b,b))
     
        for i in range(2,len(content)):
            x=content[i].split()[0]
            y = content[i].split()[1]
            mat[int(x),int(y)]=content[i].split()[2]
     
        print (mat)

  6. #6
    Membre habitué Avatar de robinechuca
    Homme Profil pro
    PHELMA grenoble inp
    Inscrit en
    avril 2019
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : PHELMA grenoble inp
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : avril 2019
    Messages : 108
    Points : 131
    Points
    131
    Par défaut Reformulation de votre code
    Bonjour, Ce que je vais dire est exactement la même chose que wiztricks, formulé différemment:

    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
     
    import numpy as np
    with open("test.txt",'r') as fic: # Très bien d'ouvrir les fichier comme ça!
        content=fic.readline() # La tu accèdes à la première ligne, le nombre de sommet j'imagine.
        b=int(content) # Pourquoi pas mais c'est pas très parlant 'b', pourquoi pas metre 'n_sommets' ou un nom plus parlant.
        arrête=5 # Il faut pas l'imposer cette valeur, refai un int(fic.readline()), comme au dessus pour lire la ligne suivante. Pareil, il faudrait un nom plus parlant.
        mat=np.zeros((b,b)) # Très bien, c'est propre cette ligne.
        for i in range(arrête-1): # Heu, c'est bizarre là
            mat[i,i]=0 # Pourquoi mettre des 0 là ou il y en à déjà?
        c=list(fic.readlines()[5]) # Pourquoi se concentrer seulement sur la dernière arrête?
        valeur='' # Quel est l’intérêt de transformer une chaîne de caractère en liste, pour la retransformer en chaîne de caractère?
        cmp=3
        while c[cmp] != '\n': # J'ai l'impression qu'il y a une confusion entre les lignes du fichier et les mots dans une même ligne.
            valeur+=c[cmp] # Attention, c'est pas une somme de nombre mais une somme de caractère qui est faite ici.
            cmp+=1 # Les 5 dernières lignes sont équivalentes à valeur = c[3:-1] .
        x=int(c[0]) # Vous ne récuperez pas le nombre mais le chiffre.
        y=int(c[2]) # Pareille, ce que vous voulez sûrement faire, c'est y = int(c.split(" ")[1]), si vous n'aviez pas transformez la ligne en liste...
        z=int(valeur) # De la même façon, on aurai z = int(c.split(" ")[2]).
        mat[x,y]=z # Bien, mais vous ne traiter qu'une seule arrête, il faudrait tout mettre dans un for.
        print (mat) # En principe il n'y a pas d'espace, mais c'est du détail.

  7. #7
    Membre habitué Avatar de robinechuca
    Homme Profil pro
    PHELMA grenoble inp
    Inscrit en
    avril 2019
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : PHELMA grenoble inp
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : avril 2019
    Messages : 108
    Points : 131
    Points
    131
    Par défaut Pédagogique?
    Citation Envoyé par aziz.hdw Voir le message
    Bonjour,

    J'ai modifié votre code comme suit. J'ai obtenu la matrice suivante:
    [[ 0. 0. 0. 0.]
    [12. 0. 0. 0.]
    [-5. 7. 0. 0.]
    [ 0. 25. 0. 0.]]

    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
     
     
    import numpy as np
    with open("test.txt",'r') as fic:
        content=fic.readlines()
        b=int(content[0])
        arrête=int(content[1])
        mat=np.zeros((b,b))
     
        for i in range(2,len(content)):
            x=content[i].split()[0]
            y = content[i].split()[1]
            mat[int(x),int(y)]=content[i].split()[2]
     
        print (mat)
    De ce que j'ai cru comprendre de ce forum, c'est que le but n'était pas de donner des solutions toute cuite. Bon après je dois bien avouer 'aziz.hdw' nous a montré qu'il à cherché et qu'il a essayé. Donc oui il mérite qu'on l'aide. Mais du coup je me permet d'expliquer votre solution:

    -Le for ligne 10 permet de parcourir TOUTES les arrêtes, et de ne pas seulement considérer la dernière comme vous l'avez fait.
    -'split()', ça permet d'extraire les mots d'une chaîne de caractère et de les mettre dans une liste. J'ai l'impression que c'est que vous cherchiez un peu à faire non?

Discussions similaires

  1. Représentation graphique graphe Java
    Par hooouuta dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 18/11/2014, 04h07
  2. Graphiques représentant des graphes ou des réseaux
    Par enicnath dans le forum ODS et reporting
    Réponses: 2
    Dernier message: 02/04/2014, 15h34
  3. Représentation des graphes conceptuels en Prolog
    Par CristinaB dans le forum Prolog
    Réponses: 0
    Dernier message: 06/12/2007, 15h21
  4. Représentation de graphes et réseaux
    Par Bardack dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 02/03/2007, 11h34
  5. Théorie des graphes : Représentation GRAPHIQUE d'une matrice d'adjacence
    Par jm_gouy dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 03/05/2006, 16h53

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