我遇到了循环输出数量的问题。
neighbours=[]#this array will hold the distance to the k-th neighbour
for i in range(0, len(selection)-1):#208 values in selection
n2 =[]#this array will hold the distance to all the other 207 points
for k in range(0, len(selection)-1):
d = {}
if i != k:#to remove the same point being considered
ra_diff = selection[i]['ra']-selection[k]['ra']
dec_diff= selection[i]['dec']-selection[k]['dec']
d=float(math.hypot(ra_diff , dec_diff))#finds the distance
n2.append(d)
n2.sort()
neighbours.append(n2[6])#passes the 7th value to the array
这是查找k最近邻居的代码的一部分。选择有208个值,嵌套循环应计算到所有点的距离,并找到每个点的第7个最近点。
在迭代之后,邻居数组仅保持207个值(即len(邻居)= 207),但对于所有208个值,应该存在第7个最近邻居。 任何人都可以指出我的问题在哪里?
答案 0 :(得分:1)
这一行:
for i in range(0, len(selection)-1):
和
for k in range(0, len(selection)-1):
可能是问题,range
不包括stop参数,因此- 1
缺少最后一个元素。
例如
>>> L = [1, 2, 3]
>>> range(len(L)) # goes from 0 to N - 1, where N is len(L)
[0, 1, 2]
但
>>> range(len(L) - 1) # goes from 0 to N - 2
[0, 1]