高效计算数组最后一维的点积

Efficiently compute the dot product on the last dimension of an array

在多维 ndarray 的最后一个维度上计算点积的最快方法是什么?

目前我正在这样做:

import numpy as np

a=np.reshape(np.arange(90),[3,3,2,5])
b=np.reshape(np.arange(90),[3,3,2,5])
# for the sake of simplicity, a and b are the same for this example

ab=(a*b).sum(axis=-1)

我认为 einsum 在这里可能有用,但我很难将其应用到我的案例中。

谢谢!

对于通用 ndim 数组,沿最后一个轴获得总和减少 -

np.einsum('...i,...i->...',a,b)

替代 np.matmul -

np.matmul(a[...,None,:],b[...,None])[...,0,0]

注意:在 Python 3.x np.matmul 可以替换为 @ operator