【发布时间】:2017-04-25 22:45:26
【问题描述】:
我已经用谷歌搜索并在这里搜索了我的问题的答案,但没有找到答案。我在 slicing 和使用 np.where 上找到了充足的信息,我正在使用其中的一个,但我在切片一些数组时遇到了问题,它似乎没有按照我的意愿进行。
我需要什么:通过一组垂直的(x, y) 和数据数组获取相同的切片。
我现在有 3 二维数组 (n, m),其中 n 和 m 将根据我正在查看的数据集而变化,但对于同一数据集来说都是相同的。数组是X_new、Y_new和ZED_H,即x和y坐标和数据ZED_H。
X_new 和 Y_new 的坐标对于每个 ZED_H 是不同的,但差别不大。想象一下,我的数组是垂直堆叠的,0th 位于底部,Nth 位于顶部。 X_new 和 Y_new 是一个不规则网格。一旦它们被切片(隔离),它们就会被插值到 regular 网格中。
我的工作:我在0th 数据中找到最大值,就我而言,最大反射率,这给了我i、j我可以从中找到(x, y)。然后我制作任意的xmin、xmax、ymin、ymax 坐标,这些坐标在最大值周围定义了一个“框”。这一点有效。然后我需要传入每组X_new、Y_new 和ZED_H,然后从这些数组中切出对应于xmin、xmax、ymin 和ymax 内的数据。这些 max's 和 min's 都包含在每个 (x, y) 数组中。
本质上是通过垂直堆栈数据取底部数据给出的相同垂直框切片。
代码:
# find the x indices
idx = np.where((X_new >= xmin) & (X_new <= xmax))
# find the y indices
idy = np.where((Y_new >= ymin) & (Y_new <= ymax))
# slice the x and y coordinates out of the whole arrays
x_st_Z = X_new[idx[0][0]:idx[0][-1],idx[1][0]:idx[1][-1]]
y_st_Z = Y_new[idy[0][0]:idy[0][-1],idy[1][0]:idy[1][-1]]
# slice my isolated data out of the whole array
#storm_Z = ZED_H[???] # not sure what to slice with here
我尝试了多种使用np.where 的形式来尝试让它工作,但它没有。所以idx 和idy 应该返回i、j 索引,用于在min 和max 值内传入的任何(x, y) 满足条件。然后我使用这些 slice X_new 和 Y_new 给出“孤立的”坐标和孤立的数据。我不确定如何正确切片数据。 切片 X_new 和 Y_new 也工作不正确,返回整个 X_new 和 Y_new 作为idx 和@987654370 中的条件@ 没有被满足,我不明白为什么。我认为它应该返回 X_new > xmin 和 X_new < xmax 等的索引。
我不明白出了什么问题。在我的理解中,我显然遗漏了一些东西和一些逻辑。
非常感谢任何帮助和建议,因为我花了很长时间试图理解这一点,但它只是没有点击。
谢谢 利亚姆
【问题讨论】:
-
x 和 y 坐标是规则网格(相同的行或列)还是不规则的分散布局。我建议添加一组样本数组。任何答案都必须提供这样一个集合来演示动作。你可以让这项任务变得更容易。
-
输入
X_new.shape会得到什么? -
感谢您的评论 hpaulj,我已将网格信息添加到问题中。 Ebe Isaac,我得到 (259L, 666L) 所以这个数据集的所有 X_new 和 Y_new 都是相同的形状。谢谢
-
请发布
X_new和Y_new的最小示例 - 一个包含足够测试信息的示例。 -
...如果可能,还包括一个简单的
ZED_H。
标签: python arrays numpy indexing slice