分配给屏蔽数组应该会清除屏蔽。这在单维数组中对我来说工作正常,但在多维数组中不起作用。我可以通过将数组展平为单个维度或显式分配掩码(如下所示)来解决此问题,但似乎我不应该执行其中任何一个。我这样做错了吗?
import numpy
marray = numpy.ma.masked_all(3)
marray
marray.hardmask
marray.data
marray.mask
marray[2] = 2
marray
marray2 = numpy.ma.masked_all((3,3))
marray2
marray2.hardmask
marray2.data
marray2.mask
marray2[2][2] = 2
marray2
marray2.data
marray2.mask
marray2.mask[2][2] = False
marray2
最佳答案
当您执行marray2[2][2] = 2
时,第一个[2]
实际上返回第三个副本数组的行,而不是对 marray2
内的行的引用,因此您正在操作副本而不影响 marray2
。
与列表和元组不同,numpy 数组支持多维数组的多维索引。尝试将 marray2[2][2] = 2
替换为 marray2[2,2] = 2
,我相信您会得到您期望的结果。
关于python - 为多维掩码数组赋值不会清除掩码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29686547/