抱歉,代码转储太多了。我的问题是我的最后一个for循环。我正在尝试建立一个新的字典“候选者”,它包含一个站点和另一个站点的所有可能的组合,映射到它们之间的距离。例如,假设站点1的ID为1234,站点2的ID为1235,站点3的ID为1236。我希望候选字典最终是{1234\u 1235':距离,'1234\u 1236':距离},即从一个站点到其他站点的所有可能的组合。这些组合已经包含在dictkey中;我只需要重新组织它们。这是为了我可以弹出最短的距离,并最终得到一个名单的“最近的邻居”到每个网站。你知道吗
for i in np.arange(num_sites):
lat1 = lat[i]
lon1 = lon[i]
site1=site[i]
rat1 = lat1*np.pi/180.0
ron1 = lon1*np.pi/180.0
for j in np.arange(i+1,num_sites):
lat2 = lat[j]
lon2 = lon[j]
site2= site[j]
rat2 = lat2*np.pi/180.0
ron2 = lon2*np.pi/180.0
d = 2.0*np.arcsin(np.sqrt((np.sin((rat1-rat2)/2))**2 +
np.cos(rat1)*np.cos(rat2)*(np.sin((ron1-ron2)/2))**2))
# dist_arr[i,j] = 6371.0 * d
dictkey[site1+"_"+site2] = 6371.0*d
temporary = set()
for key in dictkey:
parts = key.split("_")
site_one = parts[0]
site_two = parts[1]
temporary.add(site_one)
for temps in temporary:
candidates = dict()
for key in dictkey:
parts = key.split("_")
site_one = parts[0]
site_two = parts[1]
if site_one == temps:
candidates[site_one] = dictkey[key]
最简单的方法是在计算距离的过程中准备候选人。只需准备候选人的口述,而不是口述:
上面的解决方案将为您提供字典候选人与字典的距离,以所有其他网站。当然,它的大小是原来的两倍—它存储1234->;4567和4567->;1234的相同数据。你知道吗
但正如您所见,它提供了获取价值的简单方法。 例如,如果您需要到达距离1234最远的地点:
摘自答案1
最近的站点将是元组:
(<ID of closest site>, <distance>)
如果您需要更节省内存的解决方案,请写信。这不是最佳的,因为它会生成两倍大小的数据。你知道吗
更新
如果您需要获取原始站点的ID以及最短距离站点:
最近的地点:
(<ID of original site>, <ID of closest site>, <distance>)
相关问题 更多 >
编程相关推荐