Numpy 提取网格数据的子集

标签 numpy vector scipy

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

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]

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

最佳答案

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

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]

关于Numpy 提取网格数据的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25744781/

相关文章:

python - Numpy 逐 block 减少操作

c++ - 无法访问指针 vector map 元素,

c++ - 字符串 vector ,每个字符串的长度和 C++ 中的 strlen

python - 如何获得三对角托普利茨矩阵的实特征值和特征向量?

python - 在 numpy 数组 ((x, y, z)...) 中搜索与最近的 x, y 匹配的 z

python - 每次值列表中的符号变化时计算差异

python - Pandas 找到最大稳定区间

c++ - 删除 vector 行时如何更快?

python - 遍历图像目录并将它们全部旋转 x 度并保存到目录

python - 从混合高斯分布生成二维样本数据集