dot
行列乗算ですが、*
他のことをします。
2つの配列があります。
Numpy配列では、操作
X * y
要素ごとに行われますが、1つまたは両方の値を1つまたは複数の次元に展開して、互換性を持たせることができます。この操作をブロードキャストと呼びます。サイズが1または不足している寸法は、ブロードキャストで使用できます。
上記の例では、次の理由により、寸法に互換性がありません。
97 2
2 1
ここでは、最初の次元(97と2)に矛盾する数値があります。それが上記のValueErrorが不満を言っていることです。2番目の次元は、1は何とも競合しないため、問題ありません。
ブロードキャストルールの詳細:http : //docs.scipy.org/doc/numpy/user/basics.broadcasting.html
(X
とy
のタイプの場合、numpy.matrix
行列の乗算としてアスタリスクを使用できることに注意してください。私の推奨事項は、を避けてくださいnumpy.matrix
。単純化よりも複雑になる傾向があります。)
あなたの配列はnumpy.dot
; でエラーが発生したnumpy.dot
場合は、他のバグがいくつかあるはずです。の形状がの場合、numpy.dot
別の例外が発生します。
ValueError: matrices are not aligned
それでもこのエラーが発生する場合は、問題の最小限の例を投稿してください。あなたのような形の配列を使った乗算の例は成功します:
In [1]: import numpy
In [2]: numpy.dot(numpy.ones([97, 2]), numpy.ones([2, 1])).shape
Out[2]: (97, 1)
X*y
動作しないはずです(動作しません)がnp.dot(X,y)
、動作するX.dot(y))
はずです(そして私にとっては動作します)。