当我把两个大小为(n x n)*(n x 1)的numpy数组相乘时,得到一个大小为(nxn)的矩阵。遵循正规的矩阵乘法规则,需要一个(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]
最简单解
使用
numpy.dot
或a.dot(b)
。请参阅文档here。这是因为numpy数组不是矩阵,并且标准操作} ,并且
*, +, -, /
是按数组的顺序进行的。相反,您可以尝试使用^{*
将被视为矩阵乘法。其他解决方案
还要知道还有其他选择:
如下面所述,如果使用python3.5+的话,
@
操作符将按您的预期工作:如果你想过度杀戮,你可以使用^{} 。文档将为您介绍它的工作原理,但老实说,直到阅读this answer并独自使用它,我才完全理解如何使用它。
截至2016年年中(numpy 1.10.1),您可以尝试实验性的^{} ,其工作方式与
numpy.dot
类似,但有两个主要的例外:没有标量乘法,但它可以与一堆矩阵一起工作。^{} 的功能与矩阵向量乘法的
numpy.dot
相同,但对于矩阵矩阵和张量乘法的功能不同(关于the inner product and dot product之间的一般差异或see this SO answer关于numpy实现的差异,请参见维基百科)。边缘情况的较少见选项
如果有张量(维度大于或等于1的数组),则可以将^{} 与可选参数
axes=1
一起使用:不要使用^{} 如果有复数矩阵,因为矩阵将被展平为1D数组,那么它将尝试在展平矩阵和向量之间找到复数共轭点积(这将由于大小不匹配而失败)。
相关问题 更多 >
编程相关推荐