Я использую не numpy, а Eigen :: Tensor C ++ API, в котором есть только операции сжатия, это просто для того, чтобы я мог продумать реализацию из python.
Итак 'ij, ijk - > ik 'в основном похож на выполнение для l oop для каждого из первых измерений.
a = np.random.uniform(size=[10, 4])
b = np.random.uniform(size=[10, 4, 4])
vec = []
for i in range(10):
vec.append(a[i].dot(b[i]))
print(np.stack(vec, axis=0))
## or with einsum
print(np.einsum('ij,ijk->ik', a, b))
Это не может быть легко сделано с tenordot. Есть предложения?