То есть x
равно (10,2), а y
равно (10,1):
Тензоротт выдает (10,10) и соответствует переключению dot
(матричный продукт):
np.tensordot(x.T,x, axes=[[0],[-1]])
np.dot(x,x.T)
x@x.T
np.einsum('ij,kj',x,x)
То есть суммирование по меньшему измерению размера 2.
xT
и xx
также (10,10)
np.tensordot(xx,y, axes=[[-1],[0]])
np.dot(x1,y)
создает (10,1), объединив (10,10) с (10,1) на последней и 2-й до последней осей.
Упс, я пропустил:
x = np.append(np.zeros((10,1),int),x, axis=1)
, который составляет (10,3) массив. Но тензордот с x.T
все еще суммирует в меньшем измерении, производя (10,10).
Упс, дальнейшая коррекция, я пропустил детали в xx
calc.
xT (10,10)
xx (10,10) with (10,3) => (10,3)
Теперь
np.tensordot(xx,y, axes=[[-1],[0]])
проблематично, потому что он пытается объединить (10,3) и (10,1) в 3 и 10 измерениях.
np.dot(xx,y)
ValueError: shapes (10,3) and (10,1) not aligned: 3 (dim 1) != 10 (dim 0)
Вы можете суммировать по двум 10, получая массив (3,1). Это то, что вы хотите?
np.dot(x.T,y) # (3,10) with (10,1) => (3,1)