这可能是一个非常愚蠢的问题,但我被困了45分钟
np.multiply(np.transpose(phi), phi)
phi是一个矩阵,我得到了:
operands could not be broadcast together with shapes (4,10) (10,4)
我的意思是,不是矩阵乘法对形状(n,m)(m,p)?
有效答案 0 :(得分:2)
np.multiply
是元素明确的乘法。使用函数np.dot
或dot
方法进行矩阵乘法。如果phi
是np.matrix
个实例,您还可以使用二元运算符*
,例如phi.T * phi
。
例如,a
是一个numpy数组(但不是np.matrix
的实例):
In [7]: a = np.array([[1, 2], [3, 4], [5, 6]])
In [8]: a.T.dot(a)
Out[8]:
array([[35, 44],
[44, 56]])
从np.matrix
创建a
个实例:
In [9]: m = np.matrix(a)
In [10]: m
Out[10]:
matrix([[1, 2],
[3, 4],
[5, 6]])
In [11]: m.T.dot(m)
Out[11]:
matrix([[35, 44],
[44, 56]])
In [12]: m.T * m
Out[12]:
matrix([[35, 44],
[44, 56]])
答案 1 :(得分:0)
这可以按照您的预期运作:
np.dot(phi.T,phi)
正如@Warren Weckesser所解释的那样,np.muliply
(或*
运算符)对numpy 数组执行元素操作。
*
运算符为numpy 矩阵执行矩阵多重
有关numpy数组和矩阵之间的区别,请参阅this有用的文章。它建议您使用数组。