6

現在、モデルの出力を扱っていますが、2 つのデータ配列を組み合わせる良い方法が思いつかないようです。配列 A と B は異なるデータを格納し、それぞれのエントリは空間 (x,y) ポイントに対応します。A はパラメータを保持し、B はモデル出力を保持します。問題は、B が A の空間サブセクションであることです。つまり、モデルが全世界の場合、A は地球上の各ポイントでパラメーターを保存し、B はアフリカのそれらのポイントのモデル出力のみを保存します。 .

したがって、B が A からどれだけずれているかを調べる必要があります。別の言い方をすれば、重複し始めるインデックスを見つける必要があります。A.shape=(1000,1500) の場合、B はその (750:850, 200:300) 部分ですか、それとも (783:835, 427:440) サブセクションですか? それぞれのグリッドポイントの (x,y) 位置を格納する A と B の両方に関連付けられた配列があります。

これは単純な問題のように思えます。2 つの配列が重なっている場所を見つけます。そして、scipy.spatial の KDTree で簡単に解決できますが、非常に遅いです。誰にも良いアイデアはありますか?

4

3 に答える 3

1

それぞれのグリッドポイントの(x、y)位置を格納するAとBの両方に関連付けられた配列があります。

その場合、答えはかなり単純なはずです...

2つのグリッドは厳密に同じグリッドスキーム上にありますか?彼らがそうだと仮定すると、あなたはただ次のようなことをすることができます:

np.argwhere((Ax == Bx.min()) & (Ay == By.min())) 

2つのグリッドのワールド座標がグリッドのインデックスと同じ方向に増加すると仮定すると、これにより、サブセット化されたグリッドの左下隅が得られます。(そして、それらが同じ方向に増加しない場合(つまり、負dxまたはdy)、それは他のコーナーの1つを与えるだけです)

以下の例では、などから適切なインデックスを計算することもできix = (Bxmin - Axmin) / dxますが、より複雑なグリッドシステムを使用している場合でも、これは機能します。ただし、これは2つのグリッドが同じグリッドスキーム上にあることを前提としています。そうでない場合は少し複雑です...

import numpy as np

# Generate grids of coordinates from a min, max, and spacing
dx, dy = 0.5, 0.5

# For the larger grid...
Axmin, Axmax = -180, 180
Aymin, Aymax = -90, 90

# For the smaller grid...
Bxmin, Bxmax = -5, 10
Bymin, Bymax = 30, 40

# Generate the indicies on a 2D grid
Ax = np.arange(Axmin, Axmax+dx, dx)
Ay = np.arange(Aymin, Aymax+dy, dy)
Ax, Ay = np.meshgrid(Ax, Ay)

Bx = np.arange(Bxmin, Bxmax+dx, dx)
By = np.arange(Bymin, Bymax+dy, dy)
Bx, By = np.meshgrid(Bx, By)

# Find the corner of where the two grids overlap...
ix, iy = np.argwhere((Ax == Bxmin) & (Ay == Bymin))[0]

# Assert that the coordinates are identical.
assert np.all(Ax[ix:ix+Bx.shape[0], iy:iy+Bx.shape[1]] == Bx) 
assert np.all(Ay[ix:ix+Bx.shape[0], iy:iy+Bx.shape[1]] == By) 
于 2010-11-16T17:36:35.250 に答える
0

それらが重なり始めるインデックスを見つける必要があります

では、AまたはBのインデックスを探していますか?そして、Bは厳密に長方形ですか?

Bのバウンディングボックスまたは凸包を見つけるのは本当に安いです。

于 2010-11-16T07:11:27.210 に答える
0

もっと言えますか?どのモデルを使用していますか?何をモデリングしていますか?それはどのように計算されますか?

はめあいを避けるために寸法を一致させることができますか?(つまり、BがAのすべてに依存しない場合は、Bがモデル化するAの部分のみをプラグインするか、AとオーバーラップしないBの部分の退屈な値を計算し、後でそれらの値を削除します)

于 2010-11-11T04:41:09.893 に答える