给定两个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
?)
'tensordot'确实重塑和轴移动,直到它可以将任务交给'dot'。然后重新塑形。 – hpaulj