dot
ist Matrixmultiplikation, macht aber *
noch etwas anderes.
Wir haben zwei Arrays:
X
, Form (97,2)
y
, Form (2,1)
Mit Numpy-Arrays die Operation
X * y
wird elementweise ausgeführt, aber einer oder beide Werte können in einer oder mehreren Dimensionen erweitert werden, um sie kompatibel zu machen. Diese Operation wird als Rundfunk bezeichnet. Dimensionen, bei denen die Größe 1 ist oder die fehlen, können für die Übertragung verwendet werden.
Im obigen Beispiel sind die Abmessungen nicht kompatibel, weil:
97 2
2 1
Hier gibt es widersprüchliche Zahlen in der ersten Dimension (97 und 2). Darüber beschwert sich der oben genannte ValueError. Die zweite Dimension wäre in Ordnung, da Nummer 1 mit nichts in Konflikt steht.
Weitere Informationen zu den Übertragungsregeln finden Sie unter: http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html
(Bitte beachten Sie, dass wenn X
und y
vom Typ sind numpy.matrix
, ein Sternchen als Matrixmultiplikation verwendet werden kann. Meine Empfehlung ist, sich davon fernzuhalten numpy.matrix
, da dies die Dinge eher kompliziert als vereinfacht.)
Ihre Arrays sollten in Ordnung sein mit numpy.dot
; Wenn Sie eine Fehlermeldung erhalten numpy.dot
, müssen Sie einen anderen Fehler haben. Wenn die Formen falsch sind numpy.dot
, erhalten Sie eine andere Ausnahme:
ValueError: matrices are not aligned
Wenn dieser Fehler weiterhin auftritt, geben Sie bitte ein minimales Beispiel für das Problem an. Eine beispielhafte Multiplikation mit Arrays in Ihrer Form ist erfolgreich:
In [1]: import numpy
In [2]: numpy.dot(numpy.ones([97, 2]), numpy.ones([2, 1])).shape
Out[2]: (97, 1)
X*y
sollte nicht funktionieren (und es funktioniert nicht), abernp.dot(X,y)
undX.dot(y))
sollte funktionieren (und für mich tun sie es).