我有与A和B相关联的数组,它们存储每个格点的(x,y)位置。
如果是这样的话,答案应该相当简单...
这两个网格是否严格基于相同的网格方案?假设是这样的话,你只需要做如下操作:
np.argwhere((Ax == Bx.min()) & (Ay == By.min()))
假设两个网格的世界坐标沿着网格的指数方向增加,这将给出子集网格的左下角。(如果它们不沿着相同的方向增加(即负dx
或dy
),则只会给出另一个角落)
在下面的示例中,我们显然可以从ix =(Bxmin-Axmin)/ dx
等计算正确的指数,但是假设您有一个更复杂的网格系统,这仍将起作用。 但是,这是假设两个网格在相同的网格方案上! 如果它们不是,则稍微复杂一些...
import numpy as np
dx, dy = 0.5, 0.5
Axmin, Axmax = -180, 180
Aymin, Aymax = -90, 90
Bxmin, Bxmax = -5, 10
Bymin, Bymax = 30, 40
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)
ix, iy = np.argwhere((Ax == Bxmin) & (Ay == Bymin))[0]
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)