我已经写了一些代码来查找
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)
这是我初始化的值:
我附加了一个输入文本文件here,该文件包含10000点(这是测试用例1,用于挑战的大量输入),格式为 每条线一个点,每个点有3个参数(x,y,权重) 例如:980.69 595.86 619.03其中
10000分的结果应为: 3288079343.471880 ,但给出 结果为 3288079343.4719906 。 请注意,仅在10 ^ -3之后关闭。