dot
是矩阵乘法,但*
做别的。
我们有两个数组:
随着numpy的阵列,操作
X * y
以元素方式完成,但其中一个或两个值可以在一个或两个值中进行扩展或更多维度使它们兼容。这个操作被称为广播。尺寸为1或缺失的尺寸可用于广播。
在尺寸上面的例子中是不相容的,这是因为:
97 2
2 1
在这里有冲突的数目在第一维(97和2)。这是上面的ValueError抱怨的。第二个维度是可以的,因为第一个和任何东西都不冲突。
有关广播规则的详细信息: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)
来源
2014-07-03 22:08:51
DrV
什么是“原始问题”? 'X * y'不应该工作(而且不),但是'np.dot(X,y)'和'X.dot(y))'应该可以工作(并且对我来说他们可以)。 – DSM
'*'不是'ndarray'对象的矩阵乘法。 – user2357112