如何合并不同尺寸的布尔NumPy矩阵并保留所有True值?
解决方法
要合并两个不同尺寸的布尔NumPy矩阵、保留所有True值,按以下步骤操作即可:
- 确定目标矩阵尺寸:行数取两个矩阵的最大行数,列数取最大列数,确保能容纳两个矩阵的所有元素。
- 初始化全False矩阵:创建对应尺寸的全布尔False矩阵作为结果容器。
- 填充两个矩阵的True值:分别将两个矩阵的元素映射到结果矩阵的对应位置,用逻辑或操作确保所有True都被保留(避免后面的矩阵False覆盖前面的True)。
代码示例
import numpy as np # 定义输入的两个布尔矩阵 mat1 = np.array([[True, False, False], [True, False, False], [True, False, False]]) mat2 = np.array([[True, True], [False, False], [False, False]]) # 计算目标矩阵的行数和列数 max_rows = max(mat1.shape[0], mat2.shape[0]) max_cols = max(mat1.shape[1], mat2.shape[1]) # 创建初始全为False的结果矩阵 result = np.full((max_rows, max_cols), False) # 填充第一个矩阵的True值 result[:mat1.shape[0], :mat1.shape[1]] |= mat1 # 填充第二个矩阵的True值,逻辑或操作确保所有True都保留 result[:mat2.shape[0], :mat2.shape[1]] |= mat2 print(result)
运行后输出即为你需要的矩阵:
[[ True True True] [ True False False] [ True False False]]
补充说明
- 用
|=(逻辑或赋值)而非直接赋值,是为了适配更通用的场景——比如如果两个矩阵有重叠的True/False位置,能保证True不会被覆盖。 - 切片操作会自动匹配原矩阵的行列范围,超出原矩阵的部分保持初始的False状态。
内容的提问来源于stack exchange,提问作者By1
相关产品推荐
相关产品推荐

