Подтвердить что ты не робот

Numpy: Умножение матрицы с тензором 3d - Предложение

У меня есть матрица P с формой MxN и 3d-тензор T с формой KxNxR. Я хочу умножить P на каждую матрицу NxR в T, что приведет к тензору KxMxR 3d.

P.dot(T).transpose(1,0,2) дает желаемый результат. Есть ли лучшее решение (т.е. Избавление от transpose) к этой проблеме? Это должна быть довольно общая операция, поэтому я предполагаю, что другие нашли разные подходы, например. используя tensordot (который я попробовал, но не смог получить желаемый результат). Мнения/мнения будут высоко оценены!

4b9b3361

Ответ 1

scipy.tensordot(P, T, axes=[1,1]).swapaxes(0,1)

Ответ 2

Вы также можете использовать нотацию суммирования Эйнштейна:

P = numpy.random.randint(1,10,(5,3))
P.shape
T = numpy.random.randint(1,10,(2,3,4))
T.shape

numpy.einsum('ij,kjl->kil',P,T)

который должен дать вам те же результаты, что и:

P.dot(T).transpose(1,0,2)