dot
ist Matrixmultiplikation, aber *
macht etwas anderes.
Wir haben zwei Arrays:
X
, Form (97,2)
y
, Form (2,1)
Mit Numpy Arrays, die Operation
X * y
ist elementweise getan, aber einer oder beide Werte können in einem oder beiden erweitert werden mehr Dimensionen, um sie kompatibel zu machen. Dieser Vorgang wird als Broadcasting bezeichnet. Dimensionen, bei denen die Größe 1 ist oder die fehlen, können im Rundfunk verwendet werden.
In dem obigen Beispiel den Abmessungen sind nicht kompatibel, weil:
97 2
2 1
Hier gibt widersprüchlichen Zahlen in der ersten Dimension sind (97 und 2). Darüber beklagt sich der oben genannte ValueError. Die zweite Dimension wäre in Ordnung, da Nummer 1 nicht mit irgendetwas kollidiert.
Weitere Informationen über Rundfunk Regeln. http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html
(Bitte beachten Sie, dass, wenn X
und y
vom Typ sind numpy.matrix
, dann können Sternchen als Matrixmultiplikation verwendet werden Meine Empfehlung weg von numpy.matrix
zu halten ist, es neigt dazu, komplizieren mehr als Dinge zu vereinfachen.)
Ihre Arrays sollten in Ordnung sein mit numpy.dot
; Wenn Sie einen Fehler auf numpy.dot
erhalten, müssen Sie einen anderen Fehler haben. Wenn die Formen für numpy.dot
falsch sind, erhalten Sie eine andere Ausnahme:
ValueError: matrices are not aligned
Wenn Sie immer noch diese Fehlermeldung erhalten, schreiben Sie bitte ein minimales Beispiel für das Problem.Ein Beispiel Multiplikation mit Arrays wie das Ihre geformt gelingt:
In [1]: import numpy
In [2]: numpy.dot(numpy.ones([97, 2]), numpy.ones([2, 1])).shape
Out[2]: (97, 1)
Was ist die "ursprüngliche Frage"? 'X * y' sollte nicht funktionieren (und es nicht), aber' np.dot (X, y) 'und' X.dot (y)) 'sollte funktionieren (und für mich tun sie das). – DSM
'*' ist keine Matrixmultiplikation für 'ndarray' Objekte. – user2357112