大きなコードをダンプして申し訳ありません。私の問題は私の最後のforループです。私は、あるサイトと他のサイトとの可能な組み合わせをすべて含み、それらの間の距離にマップされた新しい辞書「候補者」を設定しようとしています。たとえば、サイト1にはID 1234、サイト2にはID 1235、サイト3にはID 1236があります。最終的に候補となるものは{'1234_1235':distance、 '1234_1236':distance}です。あるサイトから他のサイトへの可能な組み合わせ。これらの組み合わせはすでに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
をachiveする最も簡単な方法は、距離を計算する時に候補を調製することである半正矢式
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]
グレート、ありがとう! closest_siteに元のサイトも出力する方法はありますか?そのため、どちらのサイトが自宅ですか、どちらのサイトが最も近いかわかりますか?そうでなければ、私はcandidates.get(site1、{})のような何かをすると、私はすべての最も近い隣人IDを取得しますが、元のサイト番号は取得しません。しかし、非常にクールなアイデア、辞書の辞書! – Ravmcgav