合并掩码数组 - python

merging masked arrays - python

好的,我已经看到了与此类似的问题,并且一直在尝试应用多种方法。我不知道我做错了什么。

我有一个创建掩码数组的函数:

def masc(arr,z):
        return(np.ma.masked_where((arr[:,:,2] <= z+0.05)*(arr[:,:,2] >= z-0.05)))

其中 arr 是三维数组,z 是任意值。

我正在努力在唯一的 z 上迭代它,但目前只是试验和错误 运行 具有两个不同 z 值的函数,并将两个掩码数组合并在一起。到目前为止,我的代码如下所示:

masked_array1_1 = masc(xyz,z1)
masked_array1_2 = masc(xyz,z2)

masked_1 = np.logical_and(masked_array1_1.mask,masked_array1_2.mask)
masked_array1 = np.ma.array(xyz,mask=masked_1)

我在代码行出现以下错误

masked_array1 = np.ma.array(xyz,mask = masked_1)

掩码和数据不兼容:数据大小为 703125,掩码大小为 234375。

我个人觉得错误很明显,但我的 python 眼睛看不到。让我知道是否需要提供示例数组。

首先我想def masc应该是这样吧?

def masc(arr,z):
    return np.ma.masked_where((arr[:,:,2] <= z+0.05)*(arr[:,:,2] >= z-0.05), arr[:,:,2])

现在回到您的问题:这是因为您在 def masc 中有 arr[:,:,2](而不仅仅是 arr)。假设 xyz 的形状为 (nx, ny, nz),那么 masc 返回的函数的形状为 (nx, ny)。这与 xyz 的形状不同。您现在可以设置 masked_array1 = np.ma.array(xyz[:,:,2],mask=masked_1) 或从任何地方完全删除 [:,:,2]