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 :

Lire et concaténer des données


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Par défaut Lire et concaténer des données
    Bonjour,

    J'ai plusieurs fichiers nommés tracex007 dans plusieurs répertoires (dont les noms sont concaténés dans Model) que j'aimerais ouvrir puis enregistrer.
    Ces fichiers tracex007 sont simplement les données d'un signal avec un colonne pour le temps et une autre pour son amplitude
    Je souhaiterais faire une boucle pour lire les fichiers concernés dans les répertoires voulus et en sortir deux matrices de dimension 2: time avec tous les temps, ampl avec toutes les amplitudes et évidemment que les indices entre time et ampl correspondent au même signal.

    j'ai commencé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Model=['73', '74', '75', '76', '70']
    Receiver='07'
    ii=0
    time=[]
    ampl=[]
    for mod in Model:
     DirFile= './%s/tracex0%s' %(mod,Receiver)
     signal = np.loadtxt(DirFile)
     time([[:],[ii]])=signal[:,0]
     ampl([[:],[ii]])=signal[:,1]
     ii += 1
    me ressort :

    time([[sizeTime],[ii]])=signal[:,0]
    SyntaxError: can't assign to function call
    Je ne dois pas avoir la bonne syntaxe. Peut être faut il utiliser .append mais je n'arrive pas l'utiliser dans ce cas.

    Merci pour votre aide.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,

    Citation Envoyé par Newenda Voir le message
    Je ne dois pas avoir la bonne syntaxe. Peut être faut il utiliser .append mais je n'arrive pas l'utiliser dans ce cas.
    Vous avez déclaré time et ampl comme list Python: pour y ajouter des objets, c'est effectivement .append...
    Mais comme vous voulez fabriquer une matrice numpy à deux dimensions, la syntaxe pourrait s'appliquer à un array numpy mais vous ne l'avez pas créé... Comme de toutes façons, vous ne connaissez pas à priori la taille de l'array numpy que vous voulez créer, il faut chercher dans la documentation numpy comment "empiler" ou "concaténer" une ou plusieurs arrays.

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

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Par défaut
    Merci pour votre réponse,

    Stack devrait faire l'affaire parfaitement mais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Model=['73', '74', '75', '76', '70']
    Receiver='07'
    ii=0
    time=[]
    ampl=[]
    for mod in Model:
     DirFile= './%s/tracex0%s' %(mod,Receiver)
     signal = np.loadtxt(DirFile)
     sizeTime=len(signal)
     time=np.stack(signal[:,0])
     ampl=np.stack(signal[:,1])
    me garde pas les data (signal) les uns après les autres mais qu'un seul.

    et je ne vois pas pourquoi, il n'y a pas beaucoup d'exemple pour osn utilisation dynamique dans une boucle

    et si j'utilise append comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Model=['73', '74', '75', '76', '70']
    Receiver='07'
    ii=0
    time=[]
    ampl=[]
    for mod in Model:
     DirFile= './%s/tracex0%s' %(mod,Receiver)
     print DirFile
     signal = np.loadtxt(DirFile)
     time.append(np.array(signal[:,0]))
     ampl.append(np.array(signal[:,1]))
      print time.shape
     
     ii += 1
    il me renvoi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AttributeError: 'list' object has no attribute 'shape'
    alors que je pensais que np.array(data) transformait une liste en array justement.

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    je ne vois pas pourquoi, il n'y a pas beaucoup d'exemple pour osn utilisation dynamique dans une boucle
    Imaginez additionner les 10 premiers entiers dans une boucle en écrivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    s = 0
    for x in range(10):
         s = x
    print (s)
    çà va afficher la dernière valeur de x.

    En écrivant time=np.stack(signal[:,0]), vous ne faites pas grand chose d'autre.

    Et vous pouvez toujours chercher une solution sur Internet, çà ne sera pas facile car c'est la maîtrise des constructions de base qui vous manquent.

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

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Par défaut
    Oui justement, j'ai essayé des constructions avec indexage comme dans un premier post, avec append ensuite et stack etc.
    Ces constructions ne me paraissent pas aberrante de sens lorsqu'on regarde la documentation.
    Pourriez vous me mettre sur la voie?

    Dois je utiliser un indexage pour une construction dynamique dans une boucle ? puis je utiliser append ou comment utiliser stack ? comment définir une array si ce n'est pas par np.array() ?

    Merci pour toutes remarques qui me feraient avancer.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 002
    Par défaut
    Pour rendre ma question plus simple:

    Voici mon code, je transforme bien mes valeurs en array car toutes les valeurs sont des floats et tous les fichiers signals ont la même dimension.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Model=['73', '74', '75', '76', '70']
    Receiver='07'
    ii=0
    time=[]
    ampl=[]
     for mod in Model:
     DirFile= './%s/tracex0%s' %(mod,Receiver)
     
     signal = np.loadtxt(DirFile)
     
     time = np.array(signal[:,0],float)
     ampl = np.array(signal[:,1],float)
     
     ii += 1
    J'aimerais connaitre la syntaxe d'indexage pour remplir les variables "time" et "ampl" à chaque itération de la boucle.

    Ou alors est il possible d'utiliser STACK ou CONCATENATE dans une boucle. En ajoutant simplement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     time = np.array(signal[:,0],float)
     a=np.stack(time)
     ampl = np.array(signal[:,1],float)
     b=np.stack(ampl)
    ça ne fonctionne pas, a et b sont écrasés au fur et à mesure.



    Merci d'avance

Discussions similaires

  1. Comment lire et envoyer des données dans un automate
    Par orj30754 dans le forum VB.NET
    Réponses: 3
    Dernier message: 06/09/2007, 13h01
  2. Comment lire et envoyer des données dans un automate
    Par orj30754 dans le forum VB.NET
    Réponses: 0
    Dernier message: 04/09/2007, 12h01
  3. Concaténation des données d'un tableau
    Par SybVicious dans le forum Débuter
    Réponses: 13
    Dernier message: 25/07/2007, 15h05
  4. Réponses: 6
    Dernier message: 09/11/2006, 16h34
  5. lire et ecrire des donnée dans un .ini
    Par gsmdu62 dans le forum Delphi
    Réponses: 6
    Dernier message: 25/05/2006, 03h29

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