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 :

Remplir une matrice


Sujet :

Calcul scientifique Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Par défaut Remplir une matrice
    Bonjour à tous,

    Voilà l'exercice que je suis entrain de faire pour un projet éventuel. Je viens lire dans un fichier toute les lignes et lorsque je tombe sur le GRID je viens récupérer un ensemble de données relative à cette ligne dans des champs bien précis. Jusque là pas vraiment de soucis.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    chaines = ["GRID"] # Texte a rechercher 
     
    fichier = open("modele_default_group.dat","r") 
    for ligne in fichier:
        for chaine in chaines:
            if chaine in ligne:
                NamCard=ligne[0:8]
                ID_GRID=ligne[8:16]
                CP=ligne[16:24]
                X_GRID=ligne[24:32]
                Y_GRID=ligne[32:40]
                Z_GRID=ligne[40:48]
    La suite de mon exercice est de récupérer ces infos et de les mettre dans un "tableau" ou une "matrice" afin d'avoir pour chaque ligne de ma matice les infos dans l'ordre suivant : NamCard,ID_GRID,CP,X_GRID, Y_GRID_Z_GRID. Au finale dans mon tbaleau je dois avoir autant de lignes que de GRID trouvé.

    J'ai essayé ceci (avec l'aide de numpy) mais au final je ne récupère dans mon tableau que la dernière ligne trouvée :

    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
     
    import numpy as np
    chaines = ["GRID"] # Texte a rechercher 
     
    fichier = open("modele_default_group.dat","r") 
    for ligne in fichier:
        for chaine in chaines:
            if chaine in ligne:
                NamCard=ligne[0:8]
                ID_GRID=ligne[8:16]
                CP=ligne[16:24]
                X_GRID=ligne[24:32]
                Y_GRID=ligne[32:40]
                Z_GRID=ligne[40:48]
                N=np.matrix([[NamCard,ID_GRID,X_GRID,Y_GRID,Z_GRID]])
    fichier.close()
    Un petit coup de pouce ?

    En pièce jointe j'ai mis le fichier que je viens lire.

    Merci d'avance.
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 064
    Par défaut
    J'ai pas tout compris,

    Ce que tu veux c'est toutes les lignes sous forme de matrices commençant par GRID ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    FICHIER = "modele_default_group.dat"
     
    def getInfos(fichier, mot):
        for ligne in fichier:
            if ligne.startswith(mot):
                yield ligne.split()
     
    with open(FICHIER, 'r') as f:
        for ligne in getInfos(f, "GRID"):
            if len(ligne) == 5:
                print(ligne)
    Ça fait l'affaire ?

  3. #3
    Membre éclairé Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    J'ai pas tout compris,

    Ce que tu veux c'est toutes les lignes sous forme de matrices commençant par GRID ?
    Oui je veux une seule matrice dans laqu'elle j'aurai les infos de la ligne GRID du fichier fournit, renseigné de la sorte :

    [ GRID 1 0. 0. 0.
    GRID 2 10. 0. 0.
    GRID 3 20. 0. 0.
    GRID 4 30. 0. 0.
    GRID5678 etc ..... ]

    1ère colone le nom de ce que j'appel une carte (ici GRID, mais elle pourra changé par la suite et sappeller autrement)
    2 ème colonne l'ID de ma carte
    3ème colonne la coordonné X
    4ème..............................Y
    5ème..............................Z

    Citation Envoyé par fred1599 Voir le message
    Ça fait l'affaire ?
    Pas tout à fait, ton code ne trouve pas la ligne GRID5678123456781234567812345678, il y a donc un problème car moi mon code la trouve, de plus il ne me créé pas une seule matrice comme expliqué juste au dessus, mais plusieurs matrice.

    D'ailleur je ne comprend pas comme tu fais pour faire des matrices sans faire appel à array, ou matrix de la bibliothèque numpy ?

    Merci de ton aide.

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 064
    Par défaut
    Pas tout à fait, ton code ne trouve pas la ligne GRID5678123456781234567812345678, il y a donc un problème car moi mon code la trouve, de plus il ne me créé pas une seule matrice comme expliqué juste au dessus, mais plusieurs matrice.
    Ça c'était voulu, je ne voyais pas le rapport entre le format voulu sous matrice et ce dernier, mais dans ce cas il faut virer la condition

    D'ailleur je ne comprend pas comme tu fais pour faire des matrices sans faire appel à array, ou matrix de la bibliothèque numpy ?
    Ça c'est de la recherche, quand on te présente un code, on le teste ligne par ligne et regarde sur des petits exemples les nouvelles syntaxes qu'on te montre...

    C'est de l'investissement, mais tu sors du lot en évitant l'assistanat

  5. #5
    Membre éclairé Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Ça c'était voulu, je ne voyais pas le rapport entre le format voulu sous matrice et ce dernier, mais dans ce cas il faut virer la condition

    Oui mais celà ne correspond toujours pas réellement avec le résultat souhaité. Cette dernière ligne représente le cas particulier où tout les champs sont pleins. Dans ce cas il faut toujours que dans ma matrice finale chaques colonnes correspondent bien à une donnée propre (NameCard, ID, X_GRID ...). Dans ton cas et pour la dernière ligne uniquement (GRID567812345678 ...) tout est prit comme un seul bloque (cf. résultat ci dessous).

    ['GRID', '1', '0.', '0.', '0.']
    ['GRID', '2', '10.', '0.', '0.']
    ['GRID', '3', '20.', '0.', '0.']
    ['GRID', '4', '30.', '0.', '0.']
    ['GRID5678123456781234567812345678123456781234567812345678']

    De plus au final je récupère encore plusieure matrices et non pas une seule


    Citation Envoyé par fred1599 Voir le message
    Ça c'est de la recherche, quand on te présente un code, on le teste ligne par ligne et regarde sur des petits exemples les nouvelles syntaxes qu'on te montre...

    C'est de l'investissement, mais tu sors du lot en évitant l'assistanat
    Oui biensur je test ce que vous me donnez, mais ça ne m'avance pas toujours pour autant des fois. De plus je compte par la suite faire des opération matriciel donc si je ne passe pas par array ou matrix je risque de me compliquer la vie

    Mais n'est il possible de remplir une matrice ligne par ligne ?

  6. #6
    Membre éclairé Avatar de nekcorp
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2006
    Messages : 592
    Par défaut
    Pour info j'ai légèrement modifié mon code en ajoutant rstrip et un replace afin que les champs soient bien respectés :
    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
     
    import numpy as np
    chaines = ["GRID"] # Texte a rechercher 
     
    fichier = open("modele_default_group.dat","r") 
    for ligne in fichier:
        for chaine in chaines:
            if chaine in ligne:
                #print ligne.rstrip()            
                NamCard=ligne[0:8]
                ID_GRID=ligne[8:16]
                CP=ligne[16:24]
                X_GRID=ligne[24:32]
                Y_GRID=ligne[32:40]
                Z_GRID=ligne[40:48]
                N=np.array([NamCard.rstrip().replace(" ",""),ID_GRID.rstrip().replace(" ",""),X_GRID.rstrip().replace(" ",""),Y_GRID.rstrip().replace(" ",""),Z_GRID.rstrip().replace(" ","")])
                print (N)
    fichier.close()
    plutot que de ré-écrire "x" fois .rstrip.replace il y a surement une manière de le faire plus proprement non ?

Discussions similaires

  1. Comment remplir une matrice aléatoirement ?
    Par Hamza dans le forum Langage
    Réponses: 21
    Dernier message: 08/12/2007, 19h59
  2. remplir une matrice 3D d'images
    Par twix24 dans le forum Images
    Réponses: 1
    Dernier message: 05/12/2007, 20h27
  3. Réponses: 2
    Dernier message: 26/06/2007, 15h40
  4. Remplir une matrice et afficher son contenu
    Par annoussa dans le forum Pascal
    Réponses: 2
    Dernier message: 08/11/2006, 11h48
  5. Remplir une matrice de variance/covariance
    Par ToTo13 dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 31/07/2006, 17h55

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