numpy 如何从多个布尔2D数组创建位掩码并回读?

holgip5t  于 2023-06-29  发布在  其他
关注(0)|答案(1)|浏览(105)

我有几个2D布尔数组,并试图创建一个位掩码数组(2**n),以保存所有这些在一起。

import numpy as np

np.random.seed(42)

mask_1 = np.random.choice(a=[False, True], size=(5,5))
mask_2 = np.random.choice(a=[False, True], size=(5,5))
mask_3 = np.random.choice(a=[False, True], size=(5,5))

mask = 2**0*mask_1 + 2**1*mask_2 + 2**2*mask_3

我不确定这是否是创建位掩码数组的正确方法。如果这是最好的方法,那么如何将mask转换为不同的布尔数组?

5cg8jx4n

5cg8jx4n1#

我不完全清楚你希望你的位掩码有什么类型。在给定的示例中,您将得到一个int。这就是你想要的吗?如果你只是想要一个长度为3的布尔类型的“bitmask”数组,最好这样做

import numpy as np

np.random.seed(42)

mask = np.random.choice(a=[False, True], size=(5,5,3))

print(mask[0,0]) # [False  True False]

如果需要二进制表示,可以使用现有的np.unpackbits方法。

import numpy as np

np.random.seed(42)

mask_1 = np.random.choice(a=[False, True], size=(5,5))
mask_2 = np.random.choice(a=[False, True], size=(5,5))
mask_3 = np.random.choice(a=[False, True], size=(5,5))

mask = 2**0*mask_1 + 2**1*mask_2 + 2**2*mask_3
mask = np.expand_dims(mask, axis=2)

bitmask = np.unpackbits(mask.astype(np.uint8), axis=2)
bitmask = bitmask[:,:,-3::]

print(bitmask)
# [[[0 1 0]
#  [1 1 1]...

但在这种情况下,您可以直接通过从a=[0,1]中随机选择来生成此掩码。

相关问题