在执行欧几里德计算时获取数组元素

时间:2014-09-09 02:20:07

标签: python numpy

我是python和numpy的新手。我必须计算两点之间的欧几里德距离。我的第一点是随机生成并说出

x1[35,60]

x2= [[35 60]][[26 84][69 67][80 63][11 96][44 22][17 76][57 95][44 81][10 56][29 33]]

我已成功计算出最小欧几里德距离= 22.847,并发现最小欧几里德距离在两点x1 [35,60]和x2 [44,81]之间。但我通过打印值并手动查看来发现这一点。我想在某个变量中存储x2(它给出了最小的欧几里德距离),以便我以后可以使用它。我如何实现这一目标?

这是我的代码

从随机导入randint作为r     导入numpy     来自math import hypot

x = r(1, 100)
y = r(1, 100)
isFailedTest = (5<=x<=15) and (10<=y<=11)
selected_test = []
selected_test.append ((x,y))
candidate = [ (r(1,100), r(1,100)) for i in xrange(10)]    

x1= numpy.array(selected_test)
x2= numpy.array(candidate)

dists = numpy.hypot(x1[:, 0, numpy.newaxis]-x2[:, 0], x1[:, 1, numpy.newaxis]-x2[:, 1]) 
mindist = numpy.min(dists, axis=1)
minid   = numpy.argmin(dists, axis=1)

print mindist
print candidate
print x1
print x2
print minid

我想我几乎就在那里,因为我可以看到通过打印输出实际给出最小距离的点。但我无法以编程方式访问给出最小值的点。任何帮助建议/建议都非常感谢。谢谢。

1 个答案:

答案 0 :(得分:2)

你已经接近完成了我不确定可以公平地说这里有一个问题需要解决。

minid已经包含距离点x1最小距离的候选人的索引,所以你只需要

print candidate[minid[0]]

显示最佳候选人。