Ответ 1
scipy.tensordot(P, T, axes=[1,1]).swapaxes(0,1)
У меня есть матрица P
с формой MxN
и 3d-тензор T
с формой KxNxR
. Я хочу умножить P
на каждую матрицу NxR
в T
, что приведет к тензору KxMxR
3d.
P.dot(T).transpose(1,0,2)
дает желаемый результат. Есть ли лучшее решение (т.е. Избавление от transpose
) к этой проблеме? Это должна быть довольно общая операция, поэтому я предполагаю, что другие нашли разные подходы, например. используя tensordot
(который я попробовал, но не смог получить желаемый результат). Мнения/мнения будут высоко оценены!
scipy.tensordot(P, T, axes=[1,1]).swapaxes(0,1)
Вы также можете использовать нотацию суммирования Эйнштейна:
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)