如何从多个二维布尔数组创建位掩码并逆向还原?
合并二维布尔数组为位掩码及还原方法
你的方法是完全可行的。在NumPy中,布尔数组会被自动转换为0(False)和1(True)的整数数组,通过给每个掩码数组分配不同的二进制权重(2**0、2**1、2**2),再相加就能将多个布尔数组的信息压缩到一个整数数组的二进制位中,实现位掩码的合并存储。
还原各个布尔数组的方法
可以通过位运算提取每个原始布尔数组:利用按位与(&)操作提取对应二进制位,再判断结果是否非零得到布尔值。
示例代码如下:
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 # 还原原始数组 restored_mask_1 = (mask & (2**0)) != 0 restored_mask_2 = (mask & (2**1)) != 0 restored_mask_3 = (mask & (2**2)) != 0 # 验证还原正确性 print(np.array_equal(mask_1, restored_mask_1)) # 输出 True print(np.array_equal(mask_2, restored_mask_2)) # 输出 True print(np.array_equal(mask_3, restored_mask_3)) # 输出 True
代码解释
mask & (2**k):提取位掩码数组中第k位的信息(从0开始计数),如果该位为1,结果为2**k,否则为0。!= 0:将整数结果转换回布尔值,对应原始的True/False。
内容的提问来源于stack exchange,提问作者zxdawn
相关产品推荐
相关产品推荐

