делает
C = np.einsum('...ij,...ik->...ik',A,B)
добиваться цели? C is
[[[[ 0, 0],
[ 0, 1]],
[[ 4, 6],
[ 6, 9]],
[[ 16, 20],
[ 20, 25]],
[[ 36, 42],
[ 42, 49]]],
[[[ 64, 72],
[ 72, 81]],
[[100, 110],
[110, 121]],
[[144, 156],
[156, 169]],
[[196, 210],
[210, 225]]],
[[[256, 272],
[272, 289]],
[[324, 342],
[342, 361]],
[[400, 420],
[420, 441]],
[[484, 506],
[506, 529]]]])
Это хороший пост в блоге для понимания einsum: http://ajcr.net/Basic-guide-to-einsum/
PS в вашем вопросе вы уже добавили дополнительные измерения в A и B, которые дают *
, дают внешний продукт (в 2D-версии). Однако einsum может дать внешний продукт без дополнительного измерения:
A = np.arange(24).reshape(3,4,2)
B = np.arange(24).reshape(3,4,2)
C = np.einsum('...i,...j->...ij', A, B)