私は大規模な地球物理データの配列を扱っています。私は320x340のサイズを持つ2つのnumpy配列を持っています:最初のXLAT
は、グリッド内のすべての点の緯度を含み、第2のXLON
は、グリッド内のすべての点の経度を含みます。だから、i, j
は地面の点を緯度がXLAT[i][j]
、経度がXLON[i][j]
であると説明しています。numpy.where()を使用して、指定された範囲の2つの配列で要素を検索します。
私は座標がP_LAT
とP_LON
のポイントがあり、私は与えられたポイントに最も近い4ポイントを見つけなければなりません。
まず、x軸とy軸上のすべての点を通る単純な関数を書いたが、320 * 340 = 108 800反復を行い、非常に遅い(各点に対して〜0.5秒)。
for i in range(0, lat-1):
for j in range(0, lon-1):
if ST_LON >= XLON[i][j] and \
ST_LON < XLON[i][j + 1] and \
ST_LAT >= XLAT[i][j] and \
ST_LAT < XLAT[i + 1][j]:
return (True, i, i + 1, j, j + 1)
は、その後、私はnumpy.where()
に関するいくつかの情報を発見し、このコードを書いた:
for i in range(0, lat):
rows = numpy.where((XLON[i] >= ST_LON - 0.5) & (XLON[i] <= ST_LON + 0.5))
for j in rows[0]:
if ST_LON >= XLON[i][j] and \
ST_LON < XLON[i][j + 1] and \
ST_LAT >= XLAT[i][j] and \
ST_LAT < XLAT[i + 1][j]:
return (True, i, i + 1, j, j + 1)
この機能は、はるかに高速に動作します(すべてのポイントのために〜0.015秒)が、私はそれが正しいとは思いません美しいソリューション。
XLON[i] <= ST_LON <= XLON[i][j+1]
とXLAT[i][j] <= ST_LAT <= XLAT[i+1][j]
、これはすぐに動作するはずです:
だから私の最後の質問は、私は条件を満たし両方の配列内の項目を、見つけることができる方法ですか?
あなたはXLON [I] [J]の代わりを意味しますかXLON [i]の状態であなたのラインに? – quantummind
2つの目標を設定しました。 1:最も近い4点を見つける。 2:条件を満たすアイテムを見つける。あなたは何を望んでいるのですか? – quantummind
XLONとXLATのサイズはどちらも320x340です。条件は4つの最も近い点を見つけることであり、私は与えられた条件でそれを試しました。 – Greg