ユーザーが入力した2つの値に最も近い2つの値を見つけるための最も効率的な検索アルゴリズムは何ですか?

rohanaviella

#ユーザーは、変数「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
IoaTzimas

リストに値を追加して並べ替え、左右の値を取得できます。次に例を示します。

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]

編集
0

コメントを追加

0

関連記事

TOP 一覧

  1. 1

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  2. 2

    Railsで宝石のレイアウトを使用するにはどうすればよいですか?

  3. 3

    Chromeウェブアプリのウェブビューの高さの問題

  4. 4

    Ansibleで複数行のシェルスクリプトを実行する方法

  5. 5

    アンドロイド9 - キーストア例外android.os.ServiceSpecificException

  6. 6

    Windows 10 Pro 1709を1803、1809、または1903に更新しますか?

  7. 7

    CSSのみを使用して三角形のアニメーションを作成する方法

  8. 8

    Google Playストア:アプリページにリーダーボードと実績のアイコン/バッジが表示されない

  9. 9

    GoDaddyでのCKEditorとKCfinderの画像プレビュー

  10. 10

    PyCharmリモートインタープリターはプロジェクトタブにサイトパッケージのコンテンツを表示しません

  11. 11

    Windows 7では、一部のプログラムは「ビジュアルテーマを無効にする」レジストリ設定を行いませんか?

  12. 12

    Get-ADGroupMember:このリクエストのサイズ制限を超えました

  13. 13

    Pyusb can't find a device while libusb can

  14. 14

    MySQLでJSON_LENGTHとJSON_EXTRACTを組み合わせる方法は?

  15. 15

    Postmanを使用してファイル付きの(ネストされた)jsonオブジェクトを送信する

  16. 16

    Swiftのブロックのパラメーターに関するドキュメントのマークアップ形式は何ですか?

  17. 17

    Reactでclsxを使用する方法

  18. 18

    追加後、ブートストラップマルチセレクトがテーブルで機能しない

  19. 19

    MongoDB Compass: How to select Distinct Values of a Field

  20. 20

    「埋め込みブラウザのOAuthログイン」を有効にしてコールバックURLを指定した後でも、Facebookのコールバックエラーが発生する

  21. 21

    複数行ヘッダーのJTableヘッダーテキストの折り返し(カスタムTableCellRenderer)

ホットタグ

アーカイブ