【问题标题】:merging masked arrays - python合并掩码数组 - python
【发布时间】:2021-12-28 13:28:39
【问题描述】:

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

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

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。

我个人觉得错误很明显,但我弱蟒蛇的眼睛看不到它。如果我需要提供示例数组,请告诉我。

【问题讨论】:

  • 能否将单行返回函数扩展为普通函数,这对易读性很有帮助。你能解释一下掩码数组应该是什么吗?
  • @Herman 掩码数组是一个三维数组,其中一些元素根据相应的 z 值进行掩码。这是否回答你的问题?抱歉,我不太擅长提出问题。
  • @hpaulj 你知道我做错了什么吗?

标签: python arrays numpy merge mask


【解决方案1】:

首先,我猜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]

【讨论】:

  • 好的,谢谢!是的,你修复了函数的编写方式。我从中删除了一些不必要的信息并忘记了。你知道是否有一种方法可以使用 np.logical 合并 2 个以上的掩码数组吗?
  • 使用np.logical我不知道,但如果你简单地将布尔数组相乘,也会发生同样的情况:masked_array1_1.mask*masked_array1_2.mask*masked_array1_3.mask
  • stackoverflow.com/questions/20528328/… 这实际上回答了那个确切的问题。再次感谢。
猜你喜欢
  • 2015-04-30
  • 2012-02-14
  • 1970-01-01
  • 2017-12-31
  • 2016-03-04
  • 2014-10-15
  • 1970-01-01
  • 2021-08-14
  • 2021-06-24
相关资源
最近更新 更多