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 :

Calculs des plus grandes valeurs propres


Sujet :

Calcul scientifique Python

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 18
    Points : 14
    Points
    14
    Par défaut Calculs des plus grandes valeurs propres
    Salut tout le monde,

    Je travaille sur la réduction de modèle, et pour pouvoir utiliser une technique j'ai besoin de calculer les plus grandes valeurs propres d'une matrice et leurs vecteurs propres associés.

    J'ai essayé d'utiliser numpy.linalg.eig, le problème est que cette fonction me calcule toutes les valeurs propres! Du coup je ne gagne rien du tout en temps de calcul et ma réduction ne sert plus à rien!

    Je suis donc à la recherche d'un code pour calculer par une méthode itérative les valeurs propres / vecteurs propres d'une matrice symétrique.

    Merci!

    A+

  2. #2
    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
    Je crois que tu cherches quelques chose comme arpack. Il me semble qu'une version était disponible dans scipy, au pire ça se trouve sur Google

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 18
    Points : 14
    Points
    14
    Par défaut
    Super Matthieu! Merci! C'est exactement ça! Tu viens de diviser mon temps de calcul par plus de 500

  4. #4
    Futur Membre du Club
    Inscrit en
    Juin 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 7
    Points : 6
    Points
    6
    Par défaut ???
    Citation Envoyé par Swaraj Voir le message
    Super Matthieu! Merci! C'est exactement ça! Tu viens de diviser mon temps de calcul par plus de 500
    c'était quoi exactement la solution? parceque j'ai le même problème en temps de calcul pour les valeurs et les vecteurs propres.

  5. #5
    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
    Bonjour,

    J'espère que ma réponse n'arrive pas trop tard.

    Tout d'abord il y a deux fonctions pour calculer les vecteurs propre et valeurs propres d'une matrice dans scipy.linalg :
    • eig : pour une matrice carrée quelconque
    • eigh : pour une matrice symmétrique (le h est pour hermitian)


    Ces deux fonctions retourne les valeurs propres dans l'ordre croissant et ont le paramètre eigvals qui est un tuple (low,high) qui correspondent aux indices de la plus petite et de la plus grande valeur propre à calculer.

    Quelqu'un a évoquer l'utilisation de arpack, cette bibliothèque est optimisée pour les matrices creuses et donc ne devrait pas être utilisée dans le cas général.


    Donc pour calculer par exemple les axes principaux de la matrice de covariance d'un ensemble de points :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    x = np.random.rand(100,10) # 100 points en 10 dimensions
    C = np.cov(x.T) # matrice de covariance
    # calculs des deux premiers axes principaux
    w,u = sp.linalg.eigh(C,eigvals = (8,9))
    On utilise eigh parce que la matrice est symmetrique. w contient les valeurs propres correspondant aux deux premiers axes principaux et u les vecteurs propres correspondant (sous forme de colonne). Attention a l'ordre, le premier axe principal correspond à la derniere colonne.

  6. #6
    Futur Membre du Club
    Inscrit en
    Juin 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Merci!
    Bonjour,
    Merci Alexis.M pour me répondre

    Suivant ton code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    x = np.random.rand(100,10) # 100 points en 10 dimensions
    C = np.cov(x.T) # matrice de covariance
    # calculs des deux premiers axes principaux
    w,u = sp.linalg.eigh(C,eigvals = (8,9))
    en rajoutant au début

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    import numpy as np
    import scipy as sp
    la 4ème ligne ne marche pas car il me dit la fonction est innéxistante

    Dans mon cas j'utilise des matrices carrées réelles 3x3 et symétrique(en général) pour calculer le tenseur de diffusion des images "IRM de diffusion", avant j'ai programmé l'algorithme avec la fonction numpy.linalg.eig, qui souffre d'une lenteur incroyable, surtout s'il s'agissait des images en 3d, sachant que le calcul doit être faite sur chaque pixel ou voxel.

    J'ai besoin d'une fonction qui accélère le calcul, j'aimerai bien c'est ça sera sur VTK ou ITK.

    merci d'avance.

    Salutations à tous.

  7. #7
    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
    tu peux remplacer eig par eigh (spécialisé pour les matrices symmétriques), si c'est encore trop lent (ce qui est probable) il est possible de resoudre exactement le problème aux valeurs propres dans le cas 3x3.

    Si tu veux j'ai un code C/Cython qui le fait, si tu veux je peux éventuellement te l'envoyer.

  8. #8
    Futur Membre du Club
    Inscrit en
    Juin 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Bonjour Alexis.M,
    même en C/Cython peut faire l'affaire.
    merci de l'envoyer

  9. #9
    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
    Comment te l'envoie-je ? Dans quelles conditions vas-tu utiliser le code ? Éventuellement je te demanderai de me citer si tu utilises mon code, es-tu d'accord ?

  10. #10
    Futur Membre du Club
    Inscrit en
    Juin 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Bonjour Alexis.M,

    Pour me l'envoyer j'ai mon adresse email bgyacine@ymail.com

    Je programme sous python et C, et je peux faire la conversion entre plusieurs language.

    J'essaye de programmer une application qui traite les images IRMd, pour y arriver à faire la tractographie des fibres neuronales.

    J'ai besoin d'accélérer le code avec des algorithmes optimisés pour réduire le temps de calcul.

    L'application n'est pas commerciale

    Salutations

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

Discussions similaires

  1. les plus grand valeur et vecteur propre
    Par hanane78 dans le forum MATLAB
    Réponses: 4
    Dernier message: 22/02/2011, 12h50
  2. Réponses: 2
    Dernier message: 31/01/2011, 10h51
  3. Réponses: 3
    Dernier message: 04/01/2011, 16h05
  4. La moyenne des plus grandes valeurs d'un champ
    Par aiss57 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 20/06/2009, 12h56
  5. VBA_E : Selection des 5 plus grandes valeurs d'une colonne..
    Par VBBBA dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 15/09/2006, 18h39

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