比如说,图1和图2是形状为(n1,2)和(n2,2)的numpy 2d数组,它们基本上是坐标列表。我要做的是计算以点集表示的两个图形之间的平均Hausdorff距离。以下是我的想法:
@jit(nopython=True, fastmath=True)
def dist(fig1, fig2):
n1 = fig1.shape[0]
n2 = fig2.shape[0]
dist_matrix = np.zeros((n1, n2))
min1 = np.full(n1, np.inf)
min2 = np.full(n2, np.inf)
for i in range(n1):
for j in range(n2):
dist_matrix[i, j] = np.sqrt((fig1[i, 0] - fig2[j, 0])**2 + (fig1[i, 1] - fig2[j, 1])**2)
min1[i] = np.minimum(min1[i], dist_matrix[i, j])
min2[j] = np.minimum(min2[j], dist_matrix[i, j])
d1 = np.mean(min1)
d2 = np.mean(min2)
h_dist = np.maximum(d1, d2)
return h_dist
这非常有效,但我希望通过矢量化避免这些嵌套的for
。有人能推荐一些可能的变体吗
如果需要,我可以提供一些数字生成器
两种方法
代码
性能测试
摘要
相关问题 更多 >
编程相关推荐