Python合并numpy masked array报mask与数据尺寸不兼容错误如何解决
错误原因
- 你的
masc函数基于三维数组arr的最后一个通道(索引为2)计算掩膜,得到的掩膜是二维结构。假设你的xyz数组形状为(H, W, 3),则生成的掩膜形状为(H, W),总元素数为H*W;而xyz总元素数为H*W*3,二者尺寸不匹配,因此触发报错。你给出的错误信息中数据大小是703125、掩膜大小是234375,刚好是3倍关系,也验证了这个判断。 - 你当前写的
masc函数存在参数缺失问题:np.ma.masked_where需要传入「掩膜条件」和「要应用掩膜的数组」两个核心参数,你原代码只传了条件,没有传入目标数组arr,返回结果也不符合预期。
修复方案
方案1:调整掩膜形状和三维数组匹配
如果你需要对整个三维数组应用掩膜,可以修改masc函数,将二维掩膜扩展为和原数组形状一致的三维掩膜:
def masc(arr,z): # 计算二维掩膜 mask_2d = (arr[:,:,2] <= z+0.05) & (arr[:,:,2] >= z-0.05) # 扩展为三维掩膜,和输入arr形状匹配 mask_3d = np.repeat(mask_2d[..., np.newaxis], arr.shape[-1], axis=-1) return np.ma.masked_where(mask_3d, arr)
修改后后续的合并逻辑无需调整,即可正常运行。
方案2:仅对对应通道应用掩膜
如果你只需要处理xyz的最后一个通道,可以在创建masked array时只传入对应通道的数据,保证形状匹配:
masked_array1 = np.ma.array(xyz[...,2], mask=masked_1)
内容的提问来源于stack exchange,提问作者Melanie
相关产品推荐
相关产品推荐

