点积的矩阵推广

时间:2018-05-24 19:21:13

标签: python numpy

让我们说我想要一个灵活的函数来计算两个长度为n的向量之间的点积,但是为了利用numpy中的向量化,我想在这样的对上做这个。因此,我想取两个n x m矩阵并获得1 x m矩阵,其中每个值都是列之间成对内积的结果。

如何使用Numpy有机地做到这一点?

2 个答案:

答案 0 :(得分:3)

np.einsum

np.random.seed([3, 1415])
a = np.random.rand(3, 5)
b = np.random.rand(3, 5)

np.einsum('nm,nm->m', a, b)

array([0.86657218, 1.15263707, 0.49402075, 1.06340726, 0.92129474])

'nm,nm->m'读取为两个nxm数组,将它们按元素相乘并沿长度m的维数求和。或者基本上你问的是什么。

您可以使用更多数组并沿任何维度进行求和来概括这一点

np.random.seed([3, 1415])
a = np.random.rand(3, 5, 10)
b = np.random.rand(3, 5, 10)
c = np.random.rand(3, 5, 10)

np.einsum('lnm,lnm,lnm->l', a, b, c)

array([5.48255315, 5.74368772, 4.21100655])

还有@wim的回答!

答案 1 :(得分:2)

正常数组乘法是逐元素的。所以,你想要的似乎是:

(a1*a2).sum(axis=0)

演示:

>>> a1
array([[0, 1, 2],
       [3, 4, 5]])
>>> a2
array([[5, 4, 3],
       [2, 1, 0]])
>>> (a1*a2).sum(axis=0)
array([6, 8, 6])

我不确定如何更多地使它更有效"有时会撒上一些龙蒿?