1

我认为我的代码可以做得更好......

我想要的是:

array a = ([1,2,3],[4,5,6],[7,8,9])
array b = ([2,3,4],[2,2,2])

欧几里得距离 a[0] to b[0] and b[1],然后是最小值,依此类推,其他值......

结果应该是这样的

result = ([1,2]) 

我认为我这样做的方式有点复杂:

result = [0]*len(b)
for i in a:
    c = 0
    minimum = euclid(a[0],b[0])
    place = 0
    for j in b:
        c=c+1
    if (minimum > euclid(i,j)):
          minimum = euclid(i,j)
          place = c 
    result[place-1] = result[place-1]+1

好吧,我试着更好地解释它。我有两个数组 A 和 B 数组 A 有 3 个值(值 <=> [1,2,3])现在我想用 B 的所有值计算 A 的所有值的欧几里德距离并计算 B 的频率[0] 或 B[1] 是最小值。

所以我开始编写代码手册:起初我用 b[0] 计算 a[0] 并发现那是最小值,因为目前没有最小值。接下来我用 b[1] 计算 a[0] 并发现 euclidean(a[0],b[1]) < euchlidean(a[0],b[0]) 所以我将数组设置为从 c([0,0]) 到 c([0,1]) 的时刻。接下来我计算 a[1] 到 b[0] 和 b[1] 的欧几里德距离,发现 b[0] 是这两个值中的最小值,所以我将 c 设置为 c([1,1]).. .

4

1 回答 1

1

我相信你所说的是你有两个点列表 - a& b。对于 中的每个点,为最接近的点(最小欧几里德距离)a增加一个计数器。b那是对的吗?

以下是我将如何实现这一目标:

results = [0] * len(b)
for p_a in a:
    dists = [euclid(p_a, p_b) for p_b in b]
    min_index = dists.index(min(dists))
    results[min_index] += 1
于 2013-07-17T14:16:54.690 回答