給定兩個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