Numpy提取网格数据的子集

时间:2014-09-09 12:33:53

标签: numpy vector scipy

在我的应用程序中,我有一个值矩阵及其从meshgrid命令获得的坐标(lon,lat)。 我想基于经度和纬度限制提取该矩阵的特定子区域。我尝试过这个解决方案,但它没有用。我需要输出三个矩阵,一个用于数据,另外两个用于网格。

Lons, Lats = meshgrid(X, Y)
indexes = np.where((Lons < MLon) & (Lons > mLon) & (Lats < MLat) & (Lats > mLat))
newLons = Lons[indexes]
newLats = Lats[indexes]
newData = Data[indexes]

获得的新值是一维数组而不是矩阵。 我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

np.where的观点来看,无法保证您将提取构成连续矩形子矩阵的值,因此它将它们返回平面。你可以重塑它们,但为此你需要弄清楚它们的形状。一个更好,更通用的解决方案是找到边界框,然后提取:

Xspan = np.where((X < MLon) & (X > mLon))[0][[0, -1]]
Yspan = np.where((Y < MLat) & (Y > mLat))[0][[0, -1]]

# Create a selection
sel = [slice(Xspan[0], Xspan[1] + 1), slice(Yspan[0], Yspan[1] + 1)]

# Extract
newLons = Lons[sel]  # == Lons[Xspan[0]:Xspan[1]+1, Yspan[0]:Yspan[1]+1]
newLats = Lats[sel]
newData = Data[sel]