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 :

[Numpy][vstack] MemoryError Problème


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2012
    Messages : 39
    Points : 31
    Points
    31
    Par défaut [Numpy][vstack] MemoryError Problème
    Bonjour à toutes et à tous,

    Numpy et sa fonction vstack me pose décidément beaucoup de problèmes... En voilà encore un qui s'ajoute...

    J'explique :

    J'ai écrit un script python qui lit des fichiers Excel avec la génialissime bibliothèque xlrd. J'ajoute chaque ligne à un tableau virtuel (en réorganisant ces données), ce tableau ayant les dimensions suivantes à la fin de la lecture: 13 844 lignes et 313 colonnes.

    J'effectue ensuite des opérations dans ce tableau et je duplique certaines valeurs. J'écris alors un nouveau tableau de dimentions : 13 844 lignes et 3 744 colonnes. Et c'est dans cette étape que je me retrouve avec une erreur qui est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Traceback (most recent call last):
      File "<pyshell#0>", line 1, in <module>
        execfile("A_HYBRIDE_3.4.py")
      File "A_HYBRIDE_3.4.py", line 1551, in <module>
        K1 = np.vstack((K1, duplication))
      File "C:\Python26\lib\site-packages\numpy\core\shape_base.py", line 226, in vstack
        return _nx.concatenate(map(atleast_2d,tup),0)
    MemoryError
    Pourtant ma ram est à 1.32 Go et je dispose de 2 Go sur mon poste...
    Il y a-t-il une limitation de taille dans les tableaux numpy au format array ?

    Cela ne vient pas du code car j'ai déjà essayé avec des données moins volumineuse et cela a fonctionné...

    Je vous remercie beaucoup de vos réponses.

    Je n'ai pas posté le script car je n'en vois pas l'utilité directe mais je peux le faire si ça peut aider certains à m'aider

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    La capacité RAM de votre poste de travail a des effets sur les performances: il y aura un stock plus ou moins important pour satisfaire le besoins des applications.

    Pour les applications, ce qui compte est la capacité maximale de l'espace virtuel adressable (VM): un environnement 32 bit offrira 1 à 2Go, les environnements 64 bits seront plus généreux (mais pas forcément linéaires).

    A côté de la capacité totale, il faut aussi considérer la fragmentation de la VM. 13444 * 3744 ~50MB multiplié par la taille des cellules un int ~4 donne 200MB. Trouver un trou de 200MB pour créer un grand tableau lorsque l'espace utilisable est 1Go sera plus difficile que s'il est 1TB.

    Allez vers un Python 64 bits sur un OS 64 bits... ou revoir l'algorithme pour qu'il s'accommode d'une VM 32 bits? Voilà peut être la bonne question à se poser.

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

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2012
    Messages : 39
    Points : 31
    Points
    31
    Par défaut
    Merci de ta réponse wiztricks,

    Donc si je comprends bien, le fait d'ajouter de la mémoire RAM sur mon poste ne réglera pas mon problème...

    Puisque tu as l'air de t'y connaitre en capacité de données et de mémoire, je voulais savoir si le fait de stocker les données en format str() prend plus de mémoire que l'int() ?

    Est-ce que le fait d'utiliser Numpy en mode array, en mode matrix, ou même utiliser des listes de listes me ferait revenir au même problème ?

    Est ce que la limitation provient des objets en eux mêmes (limite VM = taille limite d'un objet) ou plutôt de la taille limite total de la VM (limite VM = somme des tailles des objets) ?

    Merci de ta réponse encore...

    Faut que je trouve une solution !

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par sir_nebuchadnezzar Voir le message
    Donc si je comprends bien, le fait d'ajouter de la mémoire RAM sur mon poste ne réglera pas mon problème...
    Ca pourra améliorer les performances. Mais passer en 64 bits change la donne côté espace d'adressage pour les applications.

    Puisque tu as l'air de t'y connaitre en capacité de données et de mémoire, je voulais savoir si le fait de stocker les données en format str() prend plus de mémoire que l'int() ?
    Je ne sais pas comment sont stockées ces données côté Python. Mais en dessous de Python, il y a du C et en C un "int" occupe 4 bytes.
    Pour les str(), en 2.6 un caractère occupe un byte => ça dépendra de la longueur de la chaine de caractères
    En 3.x, un str est unicode et un caractère occupera 2 ou 4 bytes.

    Est ce que la limitation provient des objets en eux mêmes (limite VM = taille limite d'un objet) ou plutôt de la taille limite total de la VM (limite VM = somme des tailles des objets) ?
    Les 3.
    1 - taille brûte: 13444 * 3744 ~50MB * 4 bytes => 200 MB
    2 - ajoutez y les informations pour gérer la chose => 300-500 MB
    3 - est-ce que Numpy voudra un espace contigu (un gros trou) ou sera capable de répartir un tableau dans un espace non contigu? Comme la création d'un tableau contigu est explicite .ascontiguous array, on peut supposer qu'il est capable de créer la chose dans des trous.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2012
    Messages : 39
    Points : 31
    Points
    31
    Par défaut
    Bonjour, merci pour ta réponse.

    Je fais tourner mon script sur une machine 64 bits en ce moment. J'espère en tirer toute satisfaction ! Sinon, je vais devoir revoir mon code .

    Arg, c'est navrant de devoir le faire. C'est quand même étonnant d'arriver aux limites de la machines avec des données assez "maigres" finalement.

    Ah, cela vient de se terminer avec la machine 64 bits. Même constat, 1/3 des données réalisées et ca plante à cause d'une infortune MemoryError...

    Est ce qu'utiliser des listes de liste, et pas Numpy serait plus judicieux ? Je ne sais pas, peut être que l'architecture qu'utilise Numpy est très demandeuse de VM ?

    Merci de votre préciseuse aide !

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par sir_nebuchadnezzar Voir le message
    Je fais tourner mon script sur une machine 64 bits en ce moment. J'espère en tirer toute satisfaction ! Sinon, je vais devoir revoir mon code
    Vous avez aussi installé un Python 64 bits?
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2012
    Messages : 39
    Points : 31
    Points
    31
    Par défaut Résolu !
    Bon après avoir récupéré une machine 64 bits et avoir retouché mon code pour que le tableau stocke la donnée sous forme de int() quand il peut au lieu de str(), j'arrive à mes fins.

    Mon script tourne jusqu'au bout et cela sans MemoryError. Merci wiztricks !
    Je monte à plus de 1.9 Go de VM sur pythonw et ca fait des gros triangles !

    En conclusion : Si MemoryError

    Machine plus puissante + réduction de la taille des éléments stockés =

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

Discussions similaires

  1. [Numpy][vstack] ajout d'une ligne - Problème
    Par sir_nebuchadnezzar dans le forum Général Python
    Réponses: 1
    Dernier message: 04/09/2012, 11h53
  2. Réponses: 7
    Dernier message: 25/06/2007, 22h34
  3. Divers problèmes de matrice passant de numpy a scipy
    Par thance dans le forum Calcul scientifique
    Réponses: 25
    Dernier message: 12/06/2007, 23h33
  4. [numpy] problème dans mes imports
    Par Kuroro dans le forum Calcul scientifique
    Réponses: 1
    Dernier message: 28/05/2007, 23h07
  5. [numpy] fromstring/tostring : problème!
    Par Panthère Bleue dans le forum Calcul scientifique
    Réponses: 1
    Dernier message: 13/08/2006, 22h27

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