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 :

numpy fichier binaire


Sujet :

Calcul scientifique Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Collégien
    Inscrit en
    Mars 2003
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Mars 2003
    Messages : 192
    Par défaut numpy fichier binaire
    Bonjour,

    J'ai un fichier binaire qui a ce format :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    1 int
    np float
    np float
    np float
    np float
    np float

    "np float" étant un ceratin nombre de floats, ici np = 52428800.

    J'ai fait le code suivant pour le lire, mais je ne sais pas pourquoi, ça ne marche pas, il semble pas bien lire les données....

    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
     
     
     
    #! /use/bin/env python
     
     
    import numpy as np
    import struct as st
     
    filename = '/ou/mes/donnees/sont/fichier.dat'
    nbpart   = 0
     
     
    file = open(filename,"rb")
    nbpart=np.fromfile(filename,dtype='int32',count=1)
     
    print nbpart
     
     
    x  = np.fromfile(file, np.float32, nbpart[0])
    y  = np.fromfile(file, np.float32, nbpart[0])
    vx = np.fromfile(file, np.float32, nbpart[0])
    vy = np.fromfile(file, np.float32, nbpart[0])
    vz = np.fromfile(file, np.float32, nbpart[0])
     
    print x.min(), x.max()
    print y.min(), y.max()
     
     
    file.close()


    voici ce que ça m'affiche :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    me@here:~/code/visu/particules$ python derive_z.py
    [52428800]
    4.70197740329e-37 280.0
    7.68104314375e-07 275.521087646


    alors que ça devrait m'afficher :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    [52428800]
    1e-6 280.0
    1e-6 40.0


    Merci si vous pouvez m'aiguiller :-)

  2. #2
    Membre confirmé
    Homme Profil pro
    Collégien
    Inscrit en
    Mars 2003
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Mars 2003
    Messages : 192
    Par défaut
    Hello,

    j'ajoute deux petits codes de test qui me laissent touours dans l'incompréhension...

    le code C qui génère un fichier binaire :

    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
     
     
    int main(void)
    {
    float x[10] = {0,1,2,3,4,5,6,7,8,9};
    int np;
    FILE *fp;
     
    np = 10;
     
    fp = fopen("c2python.dat", "w");
     
    fwrite (&np, sizeof(int), 1, fp);
    fwrite (x, sizeof(float), 10, fp);
    fwrite (x, sizeof(float), 10, fp);
    fwrite (x, sizeof(float), 10, fp);
    fwrite (x, sizeof(float), 10, fp);
     
    fclose(fp);
     
    return 0;
    }


    et le code python qui doit le lire :



    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
     
    #! /use/bin/env python
     
     
    import numpy as np
    import struct as st
     
    filename = './c2python.dat'
    nbpart   = 0
     
     
    file = open(filename,"rb")
    nbpart=np.fromfile(filename,dtype='int32',count=1)
     
    print nbpart
     
     
    x  = np.fromfile(file, np.float32, nbpart[0])
    y  = np.fromfile(file, np.float32, nbpart[0])
    vx = np.fromfile(file, np.float32, nbpart[0])
    vy = np.fromfile(file, np.float32, nbpart[0])
     
     
    print x.min(), x.max()
    print y.min(), y.max()
     
     
    file.close()


    je pige vraiment pas pourquoi j'obtiens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    [10]
    0.0 8.0
    0.0 9.0

  3. #3
    Membre confirmé
    Homme Profil pro
    Collégien
    Inscrit en
    Mars 2003
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Mars 2003
    Messages : 192
    Par défaut
    j'ai trouvé l'erreur, je la donne au cas où quelqu'un fasse la même un jour.

    En regardant de près le code que j'ai donné, vous pourrez voir que j'ouvre le fichier 'filename', et qu'un objet 'file' est ainsi créé. La fonction numpy.fromfile() prend une string ou un objet fichier en argument.

    Le hic étant que j'ai passé lors de mon premier appel à fromfile() la string filename., autrement dit fromfile a ouvert et fermé le fichier pour moi....

    or les appels suivant donnent 'file' à fromfile(), du coup le pointeur dans ce fichier est à 0....


    Voilà

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Ah oui... Dans ce genre de cas, il faut pas hésiter à bien relire la doc

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

Discussions similaires

  1. Afficher un fichier binaire sous Windows
    Par Atomikx dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 14/12/2004, 00h29
  2. [LG]ecriture dans un fichier binaire
    Par jsaviola dans le forum Langage
    Réponses: 3
    Dernier message: 26/12/2003, 17h30
  3. [Debutant] Comment lire la taille d'un fichier binaire ?
    Par Invité dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 18/12/2003, 19h20
  4. communication fichier binaire fichier txt
    Par micdie dans le forum C
    Réponses: 3
    Dernier message: 05/12/2002, 00h19
  5. fichier binaire ou texte
    Par soussou dans le forum C++Builder
    Réponses: 4
    Dernier message: 14/06/2002, 13h39

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