我正在寻找使用einsum来确定不同行数但列数相等的numpy数组之间的距离的解决方案。我尝试了各种组合,但唯一成功的方法是使用以下代码。显然我错过了什么,文献和众多线程也没有让我更接近解决方案。我希望能找到一种通用性,使得起点可以是任意数量的,目标数组可以是任意数量的。我只处理二维数组,也没有将其扩展到其他维度的意图。我也熟悉pdist、cdist和其他达到我所需解决方案的方法,但我只对einsum感兴趣,因为我想完善我的示例库。任何帮助都将不胜感激。
以下是我正在寻找的结果...
import numpy as np
origs = np.array([[0.,0.],[1.,0.],[0.,1.],[1.,1.]])
dests = np.asarray([[4.,0.],[1.,1.],[2.,2.],[2.,3.],[0.,5.]])
for i in origs:
d =np.sqrt(np.einsum("ij,ij->i", i-dests, i-dests))
print("orig {}...dist: {}".format(i,d))
以下是我正在寻找的结果...
orig [ 0. 0.]...dist: [ 4. 1.41421356 2.82842712 3.60555128 5. ]
orig [ 1. 0.]...dist: [ 3. 1. 2.23606798 3.16227766 5.09901951]
orig [ 0. 1.]...dist: [ 4.12310563 1. 2.23606798 2.82842712 4. ]
orig [ 1. 1.]...dist: [ 3.16227766 0. 1.41421356 2.23606798 4.12310563]
cdist
在性能方面仍然会轻松击败np.einsum
(在Divakar的示例中,性能相差一个数量级)。 - ali_m