我试图获取nx2x3数组和nx3数组中每个元素的点积(n的值总是在两者之间共享)。
例如:
/omega/usecase/input
我试图获取的数组将包含以下内容:
import numpy as np
a = np.arange(12).reshape(4,3)
b = np.arange(24).reshape(4,2,3)
我确定有一种方法可以使用print(np.dot(b[0],a[0]))
print(np.dot(b[1],a[1]))
print(np.dot(b[2],a[2]))
print(np.dot(b[3],a[3]))
或einsum
,但我无法让它发挥作用。
答案 0 :(得分:3)
您可以这样使用einsum
:
>>> np.einsum('ij,ikj->ik', a, b)
array([[ 5, 14],
[ 86, 122],
[275, 338],
[572, 662]])
此处发生的所有事情是a
的轴0乘以b
的轴0,a
的轴1乘以{{1的轴2 }}。沿后一轴的值相加,并返回一个2D数组。
(b
并不能完全适用于这个特殊问题,因为我们需要沿两个轴进行乘法运算,并且只需一个进行求和。这些运算只与tensordot
配对。)