几何中位数

时间:2019-06-17 09:11:50

标签: python python-3.x computational-geometry

我已经写了一些代码来查找

  

Geometric median 以获得一组 加权点

它基于此Google-kickstart挑战。 我不需要更好的解决方案,但想知道我的代码出了什么问题

。代码针对给定的 精度值10 ^ -6 进行迭代,以达到接近几何中位数的值。我面临的问题是它会返回正确的数字值,直到10 ^ -3,然后它才出错。我不知道出了什么问题。 我还注意到更改初始化值会改变结果,但不知道为什么。 如果不考虑点的权重,代码也能保持良好的状态 这是我用来查找到每个点的距离的公式: max(abs(ix-kx),abs(iy-ky))x(weight_of_i) (它是< strong> 切比雪夫距离

这是我使用的迭代函数:

#c = previous centre , stp =previous step ,listy_r = list of points(x,y,wt) ,k = previous sum of distances
def move_ct( c,stp,listy_r,k):  #calculates the minimum centre itrateviely , returns c--> center,stp-->step,k-->sum of distances
while True:
    tmp=list()
    moves = [(c[0], c[1]+stp), (c[0], c[1]-stp),
            (c[0]+stp, c[1]), (c[0]-stp, c[1])]
    for each in moves:tmp.append(sdist(listy_r, each))
    tmp_min = min(tmp)
    if tmp_min < k:
        k = tmp_min
        index = tmp.index(tmp_min)
        c = moves[index]
        break
    else:
        stp *= 0.5   
return (c,stp,k)

这是我初始化的值:

  1. 初始几何中心=加权点的质心
  2. 精度= 10 **-6
  3. step = x,y上最高坐标与最低坐标之间距离的一半

我附加了一个输入文本文件here,该文件包含10000点(这是测试用例1,用于挑战的大量输入),格式为 每条线一个点,每个点有3个参数(x,y,权重) 例如:980.69 595.86 619.03其中

  • 980.69 = x坐标
  • 595.86 = y坐标
  • 619.03 =体重

10000分的结果应为: 3288079343.471880 ,但给出 结果为 3288079343.4719906 请注意,仅在10 ^ -3之后关闭。

0 个答案:

没有答案