You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从多个二维布尔数组创建位掩码并逆向还原?

合并二维布尔数组为位掩码及还原方法

你的方法是完全可行的。在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 17:52:00