dot
est la multiplication matricielle, mais *
fait autre chose.
Nous avons deux tableaux:
X
, forme (97,2)
y
, forme (2,1)
Avec les tableaux Numpy, l'opération
X * y
est effectué par élément, mais une ou les deux valeurs peuvent être développées dans une ou plusieurs dimensions pour les rendre compatibles. Cette opération s'appelle la diffusion. Les dimensions dont la taille est 1 ou qui manquent peuvent être utilisées en radiodiffusion.
Dans l'exemple ci-dessus, les dimensions sont incompatibles, car:
97 2
2 1
Ici, il y a des nombres contradictoires dans la première dimension (97 et 2). C'est ce dont la ValueError ci-dessus se plaint. La deuxième dimension serait correcte, car le numéro 1 n'est pas en conflit avec quoi que ce soit.
Pour plus d'informations sur les règles de diffusion: http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html
(Veuillez noter que si X
et y
sont de type numpy.matrix
, alors l'astérisque peut être utilisé comme multiplication matricielle. Ma recommandation est de rester à l'écart numpy.matrix
, cela a tendance à compliquer plus que simplifier les choses.)
Vos tableaux devraient être bien avec numpy.dot
; si vous obtenez une erreur numpy.dot
, vous devez avoir un autre bogue. Si les formes sont incorrectes numpy.dot
, vous obtenez une exception différente:
ValueError: matrices are not aligned
Si vous obtenez toujours cette erreur, veuillez publier un exemple minimal du problème. Un exemple de multiplication avec des tableaux en forme de vôtre réussit:
In [1]: import numpy
In [2]: numpy.dot(numpy.ones([97, 2]), numpy.ones([2, 1])).shape
Out[2]: (97, 1)
X*y
ne devrait pas fonctionner (et cela ne fonctionne pas), maisnp.dot(X,y)
etX.dot(y))
devrait fonctionner (et pour moi, ils le font).