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 :

Multiplication de matrices terme à terme


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Statistique
    Inscrit en
    Octobre 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Statistique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 33
    Points : 48
    Points
    48
    Par défaut Multiplication de matrices terme à terme
    Hello.

    Je fait face à une erreur que je ne comprend pas. Voici mon code:

    print "tata = ", tata
    print "tata.shape = ", tata.shape
    Indicatrice = (tata < 1e-10)
    test1 = tata + Indicatrice
    test2 = tata * Indicatrice
    et voici mes output

    tata = [[ 0.37754067]
    [ 0.37754067]
    [ 0.37754067]]
    tata.shape = (3, 1)
    puis un long message d'erreur qui se termine par

    ValueError: shapes (3,1) and (3,1) not aligned: 1 (dim 1) != 3 (dim 0)
    Je ne comprend pas cette erreur, il me semble pourtant que l’opérateur * multiplie terme les array.
    Le plus incompréhensible est que le code:

    print "tata = ", tata
    print "tata.shape = ", tata.shape
    tata = np.array(tata)
    Indicatrice = np.array(tata < 1e-10)
    test1 = tata + Indicatrice
    test2 = tata * Indicatrice
    Lui fonctionne parfaitement.
    Quelqu’un comprend-il l’erreur ici? Mon «tata» initial peut-il être autre chose qu’un array sachant qu’on peut lui appliquer une methode .shape?

    Merci à ceux qui pourront me répondre.
    Cordialement.

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

    Citation Envoyé par Obofix le gaulois Voir le message
    Quelqu’un comprend-il l’erreur ici? Mon «tata» initial peut-il être autre chose qu’un array sachant qu’on peut lui appliquer une methode .shape?
    Pour le savoir, il suffit de faire print type(tata)...
    note: c'est probablement de type "matrix".

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

  3. #3
    Membre du Club
    Homme Profil pro
    Statistique
    Inscrit en
    Octobre 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Statistique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 33
    Points : 48
    Points
    48
    Par défaut
    Merci beaucoup. Effectivement c'est bien le type matrice.
    <class 'numpy.matrixlib.defmatrix.matrix'>

    Visiblement la division d'un array par une matrice donne une matrice. De même que la soustraction d’un array à une matrice.

    Il n’est pas très clair pour moi pourquoi il y a deux type différents mais je regarderais à l’occasion.

    Merci beaucoup.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 277
    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 277
    Points : 36 762
    Points
    36 762
    Par défaut
    Citation Envoyé par Obofix le gaulois Voir le message
    Visiblement la division d'un array par une matrice donne une matrice. De même que la soustraction d’un array à une matrice.
    Relisez votre code!
    Avec Indicatrice = (tata < 1e-10) '+' et '*' fonctionnent car Indicatrice et tata sont "matrix'
    Lorsque vous forcez Indicatrice = np.array(tata < 1e-10), çà le fait mais '+' et '*' ne fonctionnent plus car les types sont différents.

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

  5. #5
    Membre du Club
    Homme Profil pro
    Statistique
    Inscrit en
    Octobre 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Statistique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 33
    Points : 48
    Points
    48
    Par défaut
    Pardon, quand je parle de la division d’un array par une matrice je parle d'un bout de code que je n'ai pas collé ici. Désolé de l’ambiguïté.

    Dans l'exemple de mon premier message
    test1 = tata + Indicatrice
    fonctionne bien parfaitement c’est l’addition de deux matrices.
    Par contre
    test2 = tata * Indicatrice
    ne fonctionne pas parce que le symbole * entre deux matrices signifie le produit scalaire et qu’il ne peut pas faire le produit scalaire entre deux matrices de taille (3,1).
    En revanche
    np.array(tata) * np.array(Indicatrice)
    realise bien une multiplication terme et terme comme je le souhaite.

    Ça se clarifie merci.

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

Discussions similaires

  1. [Débutant] Multiplier chaque ligne d'une matrice terme à terme par un vecteur
    Par Cpowa dans le forum MATLAB
    Réponses: 2
    Dernier message: 18/04/2012, 17h32
  2. Multiplication terme à terme de deux listes
    Par Bebs7 dans le forum Calcul scientifique
    Réponses: 5
    Dernier message: 07/03/2011, 22h45
  3. Multiplication terme à terme en calcul symbolique?
    Par Jean Dumoncel dans le forum MATLAB
    Réponses: 11
    Dernier message: 15/06/2009, 17h06
  4. addition multiplication terme à terme
    Par le_voisin dans le forum Boost
    Réponses: 3
    Dernier message: 02/03/2009, 18h42
  5. [LG]multiplication de matrices
    Par dreamdam dans le forum Langage
    Réponses: 11
    Dernier message: 17/07/2004, 11h02

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