dot
es la multiplicación de matrices, pero *
hace algo más.
Tenemos dos matrices:
X
, forma (97,2)
y
, forma (2,1)
Con matrices Numpy, la operación
X * y
se realiza por elementos, pero uno o ambos valores se pueden expandir en una o más dimensiones para hacerlos compatibles. Esta operación se llama radiodifusión. Las dimensiones en las que el tamaño es 1 o las que faltan se pueden utilizar en la radiodifusión.
En el ejemplo anterior, las dimensiones son incompatibles porque:
97 2
2 1
Aquí hay números en conflicto en la primera dimensión (97 y 2). Eso es de lo que se queja el ValueError anterior. La segunda dimensión estaría bien, ya que el número 1 no entra en conflicto con nada.
Para obtener más información sobre las reglas de transmisión: http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html
(Tenga en cuenta que si X
y y
son de tipo numpy.matrix
, entonces el asterisco se puede usar como multiplicación de matrices. Mi recomendación es evitar numpy.matrix
, tiende a complicar más que simplificar las cosas).
Tus matrices deberían estar bien numpy.dot
; si obtiene un error numpy.dot
, debe tener algún otro error. Si las formas son incorrectas numpy.dot
, obtienes una excepción diferente:
ValueError: matrices are not aligned
Si aún recibe este error, publique un ejemplo mínimo del problema. Un ejemplo de multiplicación con matrices con la forma de la suya tiene éxito:
In [1]: import numpy
In [2]: numpy.dot(numpy.ones([97, 2]), numpy.ones([2, 1])).shape
Out[2]: (97, 1)
X*y
No debería funcionar (y no lo hace), peronp.dot(X,y)
, yX.dot(y))
debería funcionar (y para mí que hacer).*
no es la multiplicación de matrices parandarray
objetos.