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 :

Matrice : Limite d'utilisation de numpy ?


Sujet :

Calcul scientifique Python

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    125
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Août 2008
    Messages : 125
    Points : 55
    Points
    55
    Par défaut Matrice : Limite d'utilisation de numpy ?
    Bonjour,
    j'ai besoin de votre aide car afin de contourner la limite de numpy car j'ai n boucles de calcul de matrice de type complexe (je transforme une matrice ABCD en Matrice S)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
         ABCD = numpy.matrix([[1,0],[0,1]])
      for nz in range(0,len(Z)):
    ...
    ...
        Cos = cosh(coef)
        Sin = sinh(coef)
        ABCD = ABCD * numpy.matrix([[Cos,Sin*Zc],[Sin/Zc,Cos]])
     
    ABCD
    Ce que j'ai constaté avec mes essais :
    j'ai une liste de 125 valeurs
    si je prends une valeur sur 2, ça marche (soit environ 65 boucles)
    mais si je prends toutes les valeurs (soit 125 boucles) j'ai le message d'erreur suivant :
    ABCD = ABCD * numpy.matrix([[Cos,Sin*Zc],[Sin/Zc,Cos]]) # Création de la matrice ABCD d'un élément de la ligne ([A,B],[C,D])
    File "C:\Python27\lib\site-packages\numpy\matrixlib\defmatrix.py", line 330, in __mul__
    return N.dot(self, asmatrix(other))
    MemoryError
    et j'ai besoin de toutes les valeurs, sachant que ma liste initiale pourrait atteindre 300 valeurs !

    Ma solution non mathematique serait de couper ma liste Z en plusieurs sous-listes afin d'atteindre le nombre de boucles suffisant pour satisfaire mon pc et ainsi faire une suite de boucle suivant mes sous-listes.

    Mais peut-être que numpy n'est pas l'idéal pour le calcul de matrice.

    Avez-vous quelques choses à me proposer ?

    Autre question : ai-je été claire

    Merci par avance pour votre aide
    Patricia

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Bonjour,

    Pourrais-tu donner un exemple de code que l'on puisse tester, parce que là tu utilise des noms (z, coef, ...) dont on ignore la valeur.

    De toute évidence, dans ta boucle, tu multiplies la même matrice par une matrice ce qui peut éffectivement prendre des proportions dépassant les capacités de ta machine.

    Peut-être que le même résultat pourrait être obtenu d'une autre manière, mais il faudrait plus de détails sur la question pour cela.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    125
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Août 2008
    Messages : 125
    Points : 55
    Points
    55
    Par défaut
    VinsS,

    suite à mon MP (je ne sais pas mettre de pièce jointe en MP),
    voici les fichiers

    Merci encore

    Patricia
    Fichiers attachés Fichiers attachés

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    La partie calcul est particulièrement fournie, difficile de suivre et surtout de se faire une idée des valeurs que peuvent prendre les données.

    Si éffectivement, tu peux diviser cette boucle de calcul en plusieurs sous-boucles, essayes de cette manière.

    Mais si ta matrice ABCD finit toujours à un moment donné par ne plus être gérable en mémoire, il te faudra considérer une limite de calcul pour ton programme. Limite déterminée par les capacités de la machine sur laquelle il tourne.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    125
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Août 2008
    Messages : 125
    Points : 55
    Points
    55
    Par défaut
    merci beaucoup, je vais tester les deux.
    Car a priori ma société vient d'acquerir un calculateur, je vais peut-être leur demander de le tester dessus.

    Merci encore

    Bon WE

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur R&D en apprentissage statistique
    Inscrit en
    Juin 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D en apprentissage statistique

    Informations forums :
    Inscription : Juin 2009
    Messages : 447
    Points : 752
    Points
    752
    Par défaut
    Lorsque tu multiplies plusieurs matrices, l'ordre dans lequel tu fais les multiplications est important car la taille des résultats intermédiaires, peut beaucoup varier.

    Par ex:
    A: (Nx3)
    B: (3xM)
    C: (Mx1)

    Si je fais (A * B) * C, le résultat intermédiaire A*B est de taille NxM pour un résultat final de de taille Nx1

    alors que si je fais A*(B * C), le résultat intermédiaire est de taille (3x1).

    Les quantités à stocker sont donc très différentes.

    De même les temps de calculs peuvent énormément pâtir d'un mauvais choix dans l'ordre des multiplications.

    Si tu as des aprioris sur la taille de tes matrices, utilise-les pour faire tes opérations sinon, il existe des algorithmes (programmation dynamique) pour
    calculer l'ordre optimal.

  7. #7
    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 : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par bourgui78 Voir le message
    merci beaucoup, je vais tester les deux.
    Car a priori ma société vient d'acquerir un calculateur, je vais peut-être leur demander de le tester dessus.

    Merci encore

    Bon WE
    Un calculateur ne t'aidera pas vraiment, sauf si un noeud SMP avec beaucoup de mémoire (comme les UV de SGI). Un calculateur avec des noeuds avec peu de mémoire n'est pas utilisable tel quel par ton application (typiquement des noeuds Bluegene)

Discussions similaires

  1. Limiter l'utilisation CPU d'un programme sous debian
    Par programmerPhil dans le forum Administration système
    Réponses: 3
    Dernier message: 28/03/2006, 16h07
  2. Réponses: 4
    Dernier message: 16/02/2006, 16h28
  3. Limitation d'utilisation d'application sur réseau?
    Par sessime dans le forum Langage
    Réponses: 2
    Dernier message: 10/02/2006, 19h04
  4. Requête SELECT : limite d'utilisation des index
    Par DadaWeb dans le forum Requêtes
    Réponses: 7
    Dernier message: 07/12/2005, 22h24
  5. [Info] limiter l'utilisation d'un soft à une machine
    Par bigboomshakala dans le forum C++
    Réponses: 6
    Dernier message: 17/02/2005, 12h11

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