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
    Nouveau membre du Club
    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
    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
    Nouveau membre du Club
    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
    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
    Nouveau membre du Club
    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.

###raw>template_hook.ano_emploi###