In [138]: A = np.arange(1,7).reshape(2,3)
In [139]: B = np.arange(1,10).reshape(3,3)
Используя broadcasting
, мы можем взять строки из двух массивов:
In [140]: (A[:,None,:]*B[None,:,:]).shape
Out[140]: (2, 3, 3)
In [141]: np.exp((A[:,None,:]*B[None,:,:]))
Out[141]:
array([[[2.71828183e+00, 5.45981500e+01, 8.10308393e+03],
[5.45981500e+01, 2.20264658e+04, 6.56599691e+07],
[1.09663316e+03, 8.88611052e+06, 5.32048241e+11]],
[[5.45981500e+01, 2.20264658e+04, 6.56599691e+07],
[8.88611052e+06, 7.20048993e+10, 4.31123155e+15],
[1.44625706e+12, 2.35385267e+17, 2.83075330e+23]]])
*
поэлементно; возможно, вам нужно `точечный / матричный продукт, сумма на последнем тусклом изображении:
In [142]: np.sum((A[:,None,:]*B[None,:,:]),axis=-1).shape
Out[142]: (2, 3)
In [143]: np.exp(np.sum((A[:,None,:]*B[None,:,:]),axis=-1))
Out[143]:
array([[1.20260428e+06, 7.89629602e+13, 5.18470553e+21],
[7.89629602e+13, 2.75851345e+33, 9.63666567e+52]])
einsum
- удобный инструмент для создания матричного произведения:
In [144]: np.exp(np.einsum('ij,kj->ik',A,B))
Out[144]:
array([[1.20260428e+06, 7.89629602e+13, 5.18470553e+21],
[7.89629602e+13, 2.75851345e+33, 9.63666567e+52]])
или с помощью матрицы оператор продукта:
In [145]: np.exp(A@B.T)
Out[145]:
array([[1.20260428e+06, 7.89629602e+13, 5.18470553e+21],
[7.89629602e+13, 2.75851345e+33, 9.63666567e+52]])