私は値を一致させるいくつかの方法を検討してきましたが、この場合に最適なオプションが何であるか分かりません。私は4列と316行の1)と入力テーブルである持っているもの:X、Y、DX、DY:インデックスのとき、Kx、Kyの、KDX:テーブルからの値を距離による既存の修正(グリッド上)のセットと一致させる
-233200.0 -233200.0 -19.4 21.4
-212000.0 -233200.0 -23.7 23.8
-190800.0 -233200.0 -26.8 26.4
-169600.0 -233200.0 -39.0 33.5
-148400.0 -233200.0 -39.0 33.5
-127200.0 -233200.0 -46.0 38.4
-106000.0 -233200.0 -47.2 38.2
-84800.0 -233200.0 -49.3 38.8
-63600.0 -233200.0 -50.8 35.8
-42400.0 -233200.0 -49.4 32.1
私の2番目の表は、長さ529の同様の獣でありますKdy:
1 -3995 213531 -44.1 32.7
2 -25446 213433 -48.6 37.0
3 -3175 169047 -44.7 19.7
4 -831 40968 -8.7 -15.1
5 -2771 147269 -33.1 1.3
6 -43705 82864 3.5 -5.3
7 -24925 191012 -46.2 30.4
8 -25982 236253 -58.1 48.8
9 -46318 191012 -48.2 31.2
目標は、xのそれぞれに対して、Y(316ポイント)、私は、最も近い点Kxのを見つけたいケンタッキーとX、Y、DX、DYあるリストを返したい、ですKx、Ky、Kdx、Kdy。
私は316ポイント長い距離dminと作成することができ、これらのファイルを読む:私は返すようにしようとした場合、
dmin=[]
for i in range(len(xf)):
for y in range(len(xK)):
dist=np.sqrt((x[i]-xK[y])*(x[i]-xK[y])+(y[i]-yK[y])*(y[i]-yK[y]))
dmin.append(np.min(dist))
しかしをXK、YK、dxK、DYK私は半分だけをカバーする316個の値を取得します元の316グリッドの点のx、yからの範囲です。
for i in range(len(xf)):
for y in range(len(xKnn)):
dist=np.sqrt((x[i]-xK[y])*(x[i]-xK[y])+(y[i]-yK[y])*(y[i]-yK[y]))
dmin.append(np.min(dist))
ymatch.append(yKnn[i])
xmatch.append(xKnn[i])
dxmatch.append(dxKnn[i])
dymatch.append(dyKnn[i])
私はdminのが真であるときKxと、ケンタッキー州で更新してしまうのインデックスを作成することができれば、私はテーブルを結合する可能性があるのでパンダにこれを入れて見てきました。
d={'x': x, 'y': y, 'dx': dx, 'dy': dy}
df=pd.DataFrame(data=d)
dKnn={'xK': xK, 'yK': yK, 'dxK': dxK, 'dyK': dyK}
dfKnn=pd.DataFrame(data=dKnn)
しかし、ここで私は小さなデータフレームからdKnn列を定義できないため、問題が発生しました。
最後に私はscipy.spatial.KDTreeルーチンを検索していましたが、1つの配列だけを受け入れるように設計されているように、一致するdxK、dyKを返す方法を見つけることができませんでした。パンダのデータフレームが最も有望な方法だと思われますが、私は非常に固執していますので、どんな提案も感謝しています。
私はあなたの問題について少し混乱しています。しかし、私がxK、yK、dxK、dyKを返そうとすると、元の316グリッドの点の半分をカバーする316の値が得られます。 –