Чтобы использовать @
, сделайте a
трехмерным массивом (5,1,2) с точными парами с (2,2) (или (1,2,2) при автоматической трансляции).
In [448]: np.array([[a[i,:]@b] for i in range(a.shape[0])])
Out[448]:
array([[[11, 16]],
[[19, 28]],
[[27, 40]],
[[35, 52]],
[[43, 64]]])
In [450]: a[:,None,:]@b
Out[450]:
array([[[11, 16]],
[[19, 28]],
[[27, 40]],
[[35, 52]],
[[43, 64]]])
Это на самом деле немного быстрее, чем решение einsum
- хотя с таким маленьким примером я бы не стал особо задумываться о времени.