numpy 将具有冲突掩码的两个2D掩码数组添加到一起?

ego6inou  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(104)

我将准确地提出我想要做的事情,而不是创建一个简单的问题,这样我就不会在这个过程中丢失任何我想要传达的信息。
我有两个“图像”,我想加在一起。在下图中,左图显示了一个均匀的圆圈,其中黄色表示1,其他地方为0。从本质上讲,我有一个半径来界定一个点是否有电流。

# Create image for an aperture of radius aperture_px/2
mask = xx**2 + yy**2 <= (aperture_px/2)**2 # boolean array
raw = mask.astype(float)
plt.imshow(raw)

第二张图(右)是一个类似高斯函数,定义如下,其中我只需要取该半径之外的值。

graw = np.exp(-(np.sqrt(xx**2 + yy**2) - aperture_px/2)**2/(2 * s_px.value**2))
ggraw = np.ma.array(graw, mask=mask)
plt.imshow(ggraw)

我想添加这两个数组,但到目前为止,我似乎不明白如何做到这一点。如果我直接添加它们,第二个数组的掩码会“擦除”第一个数组的值。我不能直接将遮罩应用到第二个数组,因为它会使它变平。如果我能去就好了

raw + graw[~mask]

然后收工有没有一种方法可以正确地屏蔽数组而不重复出现MaskedArray?有没有一种简单的方法可以将这两个图像添加到一起,而不会让我回到在for循环中构建东西?

9vw9lbht

9vw9lbht1#

问了一个问题,马上就能得出答案,这总是令人尴尬的。这里有一个解决方案,我需要做的是不使用掩码数组,因此不会遇到冲突掩码问题:

graw = np.where(~mask, graw, 0.)
image = raw + graw

在这里,我使用np.where将圆内的值(由掩码定义)替换为0。然后,我可以正常添加两个数组。我想这是正确的方式应用一个面具的nD阵列。

相关问题