这个问题在这里已有答案:
当我乘以两个大小(n×n)*(n×1)的numpy数组时,得到一个大小为(n×n)的矩阵 . 遵循正常的矩阵乘法规则,期望一个(n x 1)向量,但我根本无法找到有关如何在Python的Numpy模块中完成此操作的任何信息 .
问题是我不想手动实现它以保持程序的速度 .
示例代码如下所示:
a = np.array([[ 5, 1 ,3], [ 1, 1 ,1], [ 1, 2 ,1]])
b = np.array([1, 2, 3])
print a*b
>>
[[5 2 9]
[1 2 3]
[1 4 3]]
我想要的是:
print a*b
>>
[16 6 8]
1 回答
最简单的解决方案
使用
numpy.dot
或a.dot(b)
. 请参阅文档here .这是因为numpy数组不是矩阵,并且标准操作
*, +, -, /
在数组上按元素方式工作 . 相反,您可以尝试使用numpy.matrix,*
将被视为矩阵乘法 .其他解决方案
还知道还有其他选择:
@
运算符可以按预期工作:numpy.dot
,但有两个主要的例外:没有标量乘法,但它适用于矩阵堆栈 .numpy.dot
for matrix-vector multiplication but behaves differently 的矩阵矩阵和张量乘法相同(请参阅维基百科关于the inner product and dot product之间的差异或see this SO answer关于numpy的实现) .边缘情况的Rarer选项
axes=1
一起使用:n*m
vsn
) .