Python numpy-沿轴的点积之和

Python numpy-沿轴的点积之和,python,numpy,scipy,matrix-multiplication,dot-product,Python,Numpy,Scipy,Matrix Multiplication,Dot Product,我有一个AxB数组和另一个DxAxA数组,我试图找到有效的方法来计算两个数组沿D轴的点积之和(这样的结果将是AxB数组)。最明显的方法是使用for循环: result = np.zeros(first_array.shape) for d in range(0,second_array.shape[0]): result = result + np.dot(second_array[d], first_array) print result 我想知道在numpy中是否有更有效的计算方法

我有一个
A
x
B
数组和另一个
D
x
A
x
A
数组,我试图找到有效的方法来计算两个数组沿
D
轴的点积之和(这样的结果将是
A
x
B
数组)。最明显的方法是使用for循环:

result = np.zeros(first_array.shape)
for d in range(0,second_array.shape[0]):
    result = result + np.dot(second_array[d], first_array)
print result
我想知道在numpy中是否有更有效的计算方法。我已经读了一些,但不幸的是,我不完全理解它是否能够在这种情况下有所帮助

In [436]: np.einsum('ijk,km->jm',np.ones((2,3,3)),np.ones((3,4)))
Out[436]: 
array([[ 6.,  6.,  6.,  6.],
       [ 6.,  6.,  6.,  6.],
       [ 6.,  6.,  6.,  6.]])
In [437]: _.shape
Out[437]: (3, 4)
您的
dot
表示为(
k
在第一个的最后一个和第二个到第二个的最后一个之间共享):

i
添加到第一个数组与其3d形状匹配。但是从
结果中省略它会告诉
einsum
求和它的值。不求和

In [439]: np.einsum('ijk,km->ijm',np.ones((2,3,3)),np.ones((3,4))).shape
Out[439]: (2, 3, 4)
In [439]: np.einsum('ijk,km->ijm',np.ones((2,3,3)),np.ones((3,4))).shape
Out[439]: (2, 3, 4)