给定两个 numpy 数组,其中前 d
维度大小相等
import numpy
d = 3
a = numpy.random.rand(2, 2, 2, 12, 3)
b = numpy.random.rand(2, 2, 2, 5)
我想计算这些第一个维度的点积。这个
a2 = a.reshape(-1, *a.shape[d:])
b2 = b.reshape(-1, *b.shape[d:])
out = numpy.dot(numpy.moveaxis(a2, 0, -1), numpy.moveaxis(b2, 0, -2))
有效,但前提是b
的形状不是(2, 2, 2)
。搞乱 reshape
和 moveaxis
似乎也比必要的更复杂。
还有更优雅的解决方案吗? (也许与tensordot
?)
最佳答案
再次使用np.einsum
np.einsum('ijklm,ijkn->lmn',a,b)
关于python - 跨多个轴的点积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45372098/