Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 26/04/2008, à 11:56

thibaultg

[python+numpy] Sauvegarde de dictionnaire numpy

Bonjour a tous,

J'ai un petit soucis je pense que le meilleur moyen de l'expliquer est de donner un exemple:

from numpy import *
tab1=ones(1000)
tab2=zeros(1000)
my_type={"names" : ('nom','valeur'), 'formats':('S50','object')}
MTI=array([("file1",tab1),("file2",tab2)],dtype=my_type)
MTI.tofile("/home/thibault/Bureau/fichier.dat")

L'execution de ce code me donne pour erreur:

Traceback (most recent call last):
  File "/home/thibault/workspace/projet_essai/load_save.py", line 9, in <module>
    MTI.tofile("/home/thibault/Bureau/fichier.dat")
ValueError: cannot write object arrays to a file in binary mode

Ils semblerait donc que je ne puisse pas enregistrer mon des object en mode binaire, est-ce vrai ( ou alors c'est moi qui est fait une erreur?
Y a t-il moyen de contourné ce problème?


Pour mon dictionnaire j'utilise

'formats' : ('S50','object')

, le moyen serait peut-etre de ne pas mettre 'object', mais je ne sais pas comment on met des tableau numpy dans un dico sans utiliser 'object'.




Autre question l'utilisation ( c'est a dire sauvegarde et chragement )de fichier binaire est-il plus rapide
que de simple fichier texte?



Je vous remercie d'avance.
Bon journée a tous

Dernière modification par thibaultg (Le 30/04/2008, à 21:39)

Hors ligne

#2 Le 27/04/2008, à 12:02

thibaultg

Re : [python+numpy] Sauvegarde de dictionnaire numpy

Un petit up

Hors ligne

#3 Le 29/04/2008, à 17:58

thibaultg

Re : [python+numpy] Sauvegarde de dictionnaire numpy

up

Hors ligne

#4 Le 29/04/2008, à 19:00

Linkid

Re : [python+numpy] Sauvegarde de dictionnaire numpy

Salut !
Je n'ai jamais utilisé le module numpy, mais si tu as fait la même erreur dans ton prog, il risque d'y avoir un problème : vérifie que tu n'a pas oublié la parenthèse après fichier.dat"...
Avec un peu de chance, ton problèmevient de là !


Ubuntu 9.10 : "The Karmic Koala"... Un monde de rêve rempli d'animaux !
Notre liberté ne se limite pas à Windows...

Hors ligne

#5 Le 30/04/2008, à 21:56

thibaultg

Re : [python+numpy] Sauvegarde de dictionnaire numpy

Merci de ta réponse mais, le programme était correct du point de vue de la parenthèse, j'avais juste fais une faute dans l'exemple pour le forum.

Sinon j'ai toujours pas réussi a utiliser la méthode "tofile()"de numpy pour mon logiciel.
J'ai utiliser a la place cPickle:

from numpy import *
import cPickle
tab1=ones(1000)
tab2=zeros(1000)
my_type={"names" : ('nom','valeur'), 'formats':('S50','object')}
MTI=array([("file1",tab1),("file2",tab2)],dtype=my_type)
file=open("MTI.txt",'w')
cPickle.dump(MTI,file)
file.close()

Si quelqu'un connait un meilleur moyen pour écrire des tableau dans des fichiers, je suis preneur.

Dernière modification par thibaultg (Le 30/04/2008, à 22:00)

Hors ligne

#6 Le 01/05/2008, à 09:03

aleph

Re : [python+numpy] Sauvegarde de dictionnaire numpy

> thibaultg

Python permet de "pickler" certains objets. Ceci est vrai pour les tableaux de la bibliothèque numpy.
Le "Pickling" est disponible (Python 2.5) à l'aide de deux modules Pickle et cPickle, l'un en pur Python, l'autre en C.
Dans les versions futures, 3.0 et probablement aussi 2.6, le module Pickle n'existera que sous sa version en C. Selon les dernières nouvelles, il y aurait encore un petit problème avec des objets dont la taille est supérieure à quatre gigaoctets.
Ces informations de devraient laisser planer aucun doute quant à la puissance et l'utilité du module "Pickle".

Autre aspect que je ne peux commenter en détail, je ne suis pas sûr que ta façon de stocker tes "variables" soit la plus judicieuse ou la plus optimale. Structure, organisation. Pourquoi avoir recours à numpy ? Une liste, un tuple ou un dictionnaire ne ferait-il pas l'affaire ? Si le travail consiste en une association

nom_de_fichier <--> contenu_du_fichier (même une structure complexe),

un dictionnaire me paraît tout indiqué.

#7 Le 01/05/2008, à 18:43

thibaultg

Re : [python+numpy] Sauvegarde de dictionnaire numpy

D'aprés la doc que j'ai vu sur numpy ( je ne suis pas sur a 100%) le code ci-dessous permet de creer un dico facon numpy:

my_type={"names" : ('nom','valeur'), 'formats':('S50','object')}
MTI=array([("file1",tab1),("file2",tab2)],dtype=my_type

Par exemple MTI['nom'] permet de recuperer tout les nom de fichier,et MTI['valeur'] tout mes tableaux.

En gros j'ai des fichier binaire assez gros (60Mo), dont je recupere qu'une partie des données.Et pour éviter a chaque fois a l'utilisateur de devoir relire des fichiers assez lourd ( et un avoir un temps d'attente) je lui laisse la possibilité d'enregistrer son travail ( ctd et de memoriser le nom des fichier qu'il a utiliser et les donnée qui si rapporte ).

Aprés pour numpy vu que j'ai trés trés trés trés gros tableaux, j'ai pu constater que numpy me permetté de beaucoup mieux traiter les tableaux( ctd dire de facon beaucoup beaucoup plus rapide).

Mais si pour ma structure de stockage de données, ou l'utilisation de numpy, tu as des conseille ou des remarques a me faire . Je suis preneur, alors hésite pas

Hors ligne

#8 Le 01/05/2008, à 19:46

aleph

Re : [python+numpy] Sauvegarde de dictionnaire numpy

> thibaultg

Je n'ai pas *la* réponse à ton problème. La meilleure façon de traiter un grande quantité de données dépend de beaucoup de paramètres.

Le but premier de mon message était surtout de signaler que le module Pickle fait très bien son travail et pourrait très bien convenir à tes besoins.

Je ne sais pas quelle est ton expérience en Python et n'ai aucun grief à l'encontre du module numpy. Mais en tout cas soit conscient que l'utilisation des types standards n'est pas toujours aussi pénalisante que l'on croit ou bien, formulé autrement, ce n'est pas nécessairement l'utilisation de numpy qui résoudrait au mieux tes besoins. A toi de voir et de faire des essais. En tout cas, ne néglige pas cette piste.