#ユーザーは、変数「lon」と「lat」でそれぞれ表される経度と緯度を入力します。「mintemparr」を検索して、入力に最も近い場所を見つけたいと思います。私の現在のアルゴリズムは、配列の各値を調べて、経度と緯度の最小の差を見つけます。これは、配列が非常に大きいため、非常に長い時間がかかります。これを行うためのより効率的なアルゴリズムはありますか?
#「mintemparr」の1行は、[経度、緯度、温度]の形式です。入力に最も近い場所の温度を見つけようとしています。私の現在のアルゴリズムは、この配列のすべての行をトラバースします。
def match (lon, lat):
min=10000
minindex=-1
for x in range (len (mintemparr)):
if (abs ((float (lon))-float (mintemparr [x][0])))+(abs ((float
(lat))-float (mintemparr [x][1])))<min:
min=(abs ((float (lon))-float (mintemparr [x][0])))+(abs
((float (lat))-float (mintemparr [x][1])))
minindex=x
result=mintemparr [minindex][2]
print ("The Temperature is: ")
print (result)
longitude=input ("Enter Longitude: ")
latitude=input ("Enter Latitude: ")
match (longitude, latitude)
#サンプル入力:
Enter Longitude: -140
Enter Latitude: 40
#出力:
The Temperature is -6.3244445
#出力は正しいです。非常に長い時間がかかります。
#mintemparrは、緯度が一定のままで経度が-180から180に増加するように並べ替えられます。180に達すると、緯度が増加し、パターンが継続します。
#mintemparrの一部:
-179.979166666666657 89.9791666666666714 -3.39999995214436425e+38
-179.9375 89.9791666666666714 -3.39999995214436425e+38
-179.895833333333343 89.9791666666666714 -3.39999995214436425e+38
-179.854166666666657 89.9791666666666714 -3.39999995214436425e+38
-179.8125 89.9791666666666714 -3.39999995214436425e+38
-179.770833333333343 89.9791666666666714 -3.39999995214436425e+38
リストに値を追加して並べ替え、左右の値を取得できます。次に例を示します。
lons=[float(i[0]) for i in mintemparr]
#check for nearest longtitude for lon:
lons.append(lon)
lons.sort()
mylon=lons[lons.index(lon)-1] if lon-lons[lons.index(lon)-1]< lons[lons.index(lon)+1]-lon else lons[lons.index(lon)+1]
広背筋についても同じです。
mintemparr_temp=[i for i in mintemparr if i[0]==mylon]
lats=[float(i[1]) for i in mintemparr_temp]
#check for nearest longtitude for lon:
lats.append(lat)
lats.sort()
mylat=lats[lats.index(lat)-1] if lat-lats[lats.index(lat)-1]< lats[lats.index(lat)+1]-lat else lats[lats.index(lat)+1]
そして最後に:
mytemp=[i for i in mintemparr if i[0]==mylon anf i[1]==mylat]
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加