让我们说我想要一个灵活的函数来计算两个长度为n的向量之间的点积,但是为了利用numpy中的向量化,我想在这样的对上做这个。因此,我想取两个n x m矩阵并获得1 x m矩阵,其中每个值都是列之间成对内积的结果。
如何使用Numpy有机地做到这一点?
答案 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])
我不确定如何更多地使它更有效"有时会撒上一些龙蒿?