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 :

extraction de données puis multiplication matricielle


Sujet :

Python

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut extraction de données puis multiplication matricielle
    Bonjour tous,

    je m’entraîne à faire des choses similaires à ce que je faisais avant avec matlab
    et je galère un peu

    Ce que j'essai actuellement de faire c'est d'extraire deux matrices qui se trouvent dans
    des fichiers ".txt" différents et ensuite faire une multiplication matricielle et afficher le résultat.

    1) j'arrive à importer les données, les transformer en liste bidimensionnelle puis convertir en "array"

    2) par contre je ne comprends pas pourquoi ma multiplication matricielle ne fonctionne pas ??

    pourriez vous me dire s'il vous plait d'où vient le problème sur mon code ci dessous ?
    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
    #!/usr/bin/python
    # -*- coding: utf8 -*-
    import scipy as sp
    import numpy as np
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    fichier=open("exemple2Data.txt", 'r')
    data=fichier.readlines()
    count=0
    maMatrice1=[]
    for line in data:
        words = line.split(",")
        print words
        if count != 0:
            maMatrice1.append(words)
        count=count+1
    myarray1 = np.asarray(maMatrice1)
    fichier=open("exemple1Data.txt", 'r')
    data=fichier.readlines()
    count=0
    maMatrice2=[]
    for line in data:
        words = line.split()
        print words
        if count != 0:
            maMatrice2.append(words)
        count=count+1
    myarray2 = np.asarray(maMatrice2)
    results=myarray1*myarray2
    print "mon array", results
    ça me parait pas mal mais il y a surement quelque chose qui m'echappe...

    ps: j'ai mis en PJ les fichiers TXT

  2. #2
    Membre éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    654
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2010
    Messages : 654
    Points : 1 150
    Points
    1 150
    Par défaut
    Salut,

    Il y plusieurs choses qui ne vont pas.

    Premièrement pourquoi les fichiers textes contiennent des lettres? La construction de la première matrice avec ton code fourni ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ['A', 'B', 'C', 'D', 'E', 'F\n']
    ['1', '0', '0', '0', '12', '333\n']
    ['2', '0.1', '0', '0', '18', '300\n']
    ['3', '0', '0', '0', '22', '399\n']
    ['4', '0.1', '0', '0', '32', '443\n']
    ['3', '0', '0', '0', '22', '399\n']
    ['4', '0.1', '0', '0', '32', '443\n']
    [['1' '0' '0' '0' '12' '333\n']
     ['2' '0.1' '0' '0' '18' '300\n']
     ['3' '0' '0' '0' '22' '399\n']
     ['4' '0.1' '0' '0' '32' '443\n']
     ['3' '0' '0' '0' '22' '399\n']
     ['4' '0.1' '0' '0' '32' '443\n']]
    Ce n'est pas une matrice... Ensuite la methode de construction employee place dans un tableau des chaines de caractères et non des nombres. De plus il reste les '\n' qui, bien qu'invisible dans le fichier, servent à indiquer quand sauter de ligne.

    Une matrice avec numpy c'est quelque chose comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import numpy as np
     
    mat = np.array([[1, 2, 3],
                    [4, 5, 6]])
    Je te conseil de faire d'abord des tests en construisant manuellement des matrices simples comme celle que je viens de faire.

    Autre point, le produit de deux matrices se fait bien à l'aide de *, mais pas pour les arrays. Subtilité. En general on trouve plus la notion de array (je t'invite à lire la doc), et dans ce cas le produit matriciel se fait comme ceci:
    Troisième point, si tu veux lire une matrice depuis un fichier texte, je te conseil d'utiliser la method loadtxt de numpy:
    http://docs.scipy.org/doc/numpy/refe...y.loadtxt.html

    Et enfin, il est preferable (indispensable) de se familiariser avec la façon de penser de python. Tu as deux fois le meme code pour charger deux matrices. C'est une fois de trop. Il faudait mieux créer une function pour cela.


    J

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    merci beaucoup pour ta réponse.

    - en fait je sais faire des matrices avec "array" de numpy mais en fait ce que je ne sais pas faire c'est récupérer des données qui se trouve dans un fichier texte...

    - pour la fonction que tu m'as proposé elle semble supposée que le fichier soit rempli de chiffres seulements et pas de texte ? or moi la premiere ligne de mon fichier contient du texte donc je ne peux pas importer directement le contenu dans une matrice...

    pourrais tu me montrer un bout de code typique pour lire ce type de résultat ?

    en fait je pense que mon code pourrait fonctionner si j'arriverais à ne pas lire le symbole "\n"

    merci beaucoup

  4. #4
    Membre éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    654
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2010
    Messages : 654
    Points : 1 150
    Points
    1 150
    Par défaut
    Salut,

    loadtxt de numpy propose d'ignorer un certains nombres de lignes en début de fichier, ou encore d'ignorer certaines lignes précédées d'un symbole signifiant "ligne commentée".

    Voici un exemple concret (placé dans un fichier texte quelconque):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    A	B	C	D
    1	1.2	7.8951	1e-7
    2	2.2	0.0	7.8e+41
    3	3.2	0.0	0.0
    4	4.2	0.0	0.0
    5	5.2	0.0	0.0
    Charger la matrice est alors très simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import numpy as np
     
    mat = np.loadtxt('monfichier.txt', skiprows=1)
    Voilà...

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    super!!! je vais regarder ça c'est exactement ce que je cherche!!!
    donc j'ai juste à donner les numéros de lignes que je ne veux pas et c'est OK?! c'est super ça

  6. #6
    Membre éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    654
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2010
    Messages : 654
    Points : 1 150
    Points
    1 150
    Par défaut
    Citation Envoyé par membreComplexe12 Voir le message
    donc j'ai juste à donner les numéros de lignes que je ne veux pas et c'est OK?!
    Si toutes les lignes sont en début de fichier oui. Sinon, tout comme un script python, tu peux commenter certaines lignes.


    J

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    merci beaucoup, avec cette fonction c'est beaucoup plus simple que ce que je faisais

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Extraction de données d'une liste à choix multiple par macro
    Par nivea dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 03/09/2014, 16h57
  2. Extraction de données de multiples fichiers doc
    Par chtrousselle dans le forum VBA Word
    Réponses: 1
    Dernier message: 14/12/2012, 23h34
  3. [XL-2007] Trie sur données puis extraction
    Par dipnose dans le forum Excel
    Réponses: 8
    Dernier message: 25/10/2011, 14h33
  4. [debutant] extraction de données
    Par tibpower dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 02/08/2004, 14h33
  5. Extraction de données sur des fichiers excel
    Par iupgeii dans le forum MFC
    Réponses: 3
    Dernier message: 23/01/2004, 13h53

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