Учитывая два массива 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
. А потом обратно перестраивается. - person hpaulj   schedule 28.07.2017