Python 如何在矢量数组中的矢量之间矢量化np.dot?

Python 如何在矢量数组中的矢量之间矢量化np.dot?,python,numpy,vectorization,numpy-ndarray,Python,Numpy,Vectorization,Numpy Ndarray,变量: x和y是N个二维向量的数组,其形状为N,2 问题: 是否有一种方法可以在两个数组中对应于相同位置的向量之间执行点积,而无需像列表理解中那样显式写入元素:[np.dotx[i],y[i]表示范围内的i] 通常,在numpy的其他函数中,我使用选项axis=1来实现这一点,但我发现它在np.dot中不存在。是否有办法将此操作矢量化?尝试以下方法: N = 10 x = np.random.randn(N,2) y = np.random.randn(N,2) np.einsum("

变量:

x和y是N个二维向量的数组,其形状为N,2

问题:

是否有一种方法可以在两个数组中对应于相同位置的向量之间执行点积,而无需像列表理解中那样显式写入元素:[np.dotx[i],y[i]表示范围内的i]

通常,在numpy的其他函数中,我使用选项axis=1来实现这一点,但我发现它在np.dot中不存在。是否有办法将此操作矢量化?

尝试以下方法:

N = 10
x = np.random.randn(N,2)
y = np.random.randn(N,2)

np.einsum("ij,ij->i", x, y)
试试这个:

N = 10
x = np.random.randn(N,2)
y = np.random.randn(N,2)

np.einsum("ij,ij->i", x, y)

x*y.sumaxis=1应该做IIUCx*y.sumaxis=1应该做iIuc在我的电脑中,在我的特殊问题中,这个答案比x*y.sumaxis=1快3倍,真快!但我不确定这是否可以扩展到多线程/多进程。即使给定optimize=True,此np.einsum也可能无法并行运行。我看到一些状态,类似的收缩路径是有内存限制的,并且可能无法获得更多线程的加速。有人能验证这个说法吗?在我的电脑和我的特殊问题中,这个答案比x*y.sumaxis=1快了3倍,真快!但我不确定这是否可以扩展到多线程/多进程。即使给定optimize=True,此np.einsum也可能无法并行运行。我看到一些状态,类似的收缩路径是有内存限制的,并且可能无法获得更多线程的加速。有人能证实这一说法吗?