我有两个数组,第一个np.数组是从,和第二点np.数组是我需要计算的所有距离。在
示例:
import numpy as np
from_array = np.array([(0,1), (1,1), ..., (x,y)])
to_array = np.array([(5,1), (3,1), ..., (x,y)])
我需要做的是获取from_array
的第一个条目,并计算from_array[0]
到to_数组中所有点之间的所有距离,然后保持最大距离。在
所以我可以这么做:
^{pr2}$但这是缓慢的,我正在寻找一个优化的方式来做计算,因为我可以有数千点。在
最终目标是计算Hausdorff距离。在
fhd = np.mean(np.min(SomeDistanceArray,axis=0))
rhd = np.mean(np.min(SomeDistanceArray,axis=1))
print (max(fhd, rhd))
我只想在这个任务中使用numpy。 我的距离可以是欧几里得距离,也可以是平方欧几里得距离。在
所以我需要的是一个优化的方法来计算欧几里德距离法np.数组. 应该注意,数组1可能比数组2有更多的行。意味着2D数组(x,y)的长度可以比较10行和30行。在
仅限Numpy。所以没有
scipy.spatial.distance.cdist
首先,不要使用元组,使用2xN和2xM数组。然后广播。在
如果你有一个古代版本的numpy没有向量化的
^{pr2}$linalg.norm
(即,你使用的是Abaqus),请这样做:这是一个基于NumPy的方法,使用^{} -
注意:如果您以后要计算},因为计算平方根会非常昂贵。在
np.mean(np.min(SomeDistanceArray,axis=0))
,您可以跳过eucliean_dist
的计算,直接使用sq_eucliean_dist
作为{什么是
np.einsum('ijk,ijk->ij',subs,subs)
做的?它在同一个数组subs
之间执行元素乘法,即基本上是平方,然后沿着最后一个轴进行求和运算,因此在该约简过程中丢失了它。在那么,为什么不显式地进行平方和求和呢?好吧,
np.einsum
的好处是它在一个步骤中同时进行平方和求和,给了我们显著的性能效率。在因此,最后,如果}数组,的2D数组的欧几里德距离的平方。
关于字符串表示法本身的更多信息需要更长时间的讨论,其中一些可以在^{} 和之前发布的官方文档链接中找到。在
from_array
是(N x 2)
数组,to_array
是{np.einsum
的输出将是作为形状^{相关问题 更多 >
编程相关推荐