本文介绍如何使用numpy与itertools高效生成长度为2x的二元数组,其中每行由x位二进制序列及其按位取反构成,确保所有2^x种前半段组合均被覆盖且整体行唯一。
要构造一个形状为 (2^x, 2x) 的 NumPy 数组,使得每一行均由一个长度为 x 的 0-1 序列与其逻辑补(即 1 - sequence)拼接而成,最简洁、高效的方式是利用 itertools.product 生成所有可能的 x 位二进制组合,再通过向量化操作自动生成
对应的互补后半段。
具体实现如下:
import numpy as np
from itertools import product
def generate_complementary_binary_array(x):
# 生成所有 x 位二进制组合:共 2^x 种,每行为长度 x 的 list
base = np.array(list(product([0, 1], repeat=x)))
# 拼接 base 与它的按位补(1 - base),得到 (2^x, 2x) 数组
result = np.column_stack([base, 1 - base])
return result
# 示例:x = 2
print("x = 2:")
print(generate_complementary_binary_array(2))
# 输出:
# [[0 0 1 1]
# [0 1 1 0]
# [1 0 0 1]
# [1 1 0 0]]
# 示例:x = 3
print("\nx = 3:")
print(generate_complementary_binary_array(3))
# 输出 8 行 × 6 列数组,每行形如 [a,b,c,1-a,1-b,1-c]⚠️ 注意事项:
总结:该方案以清晰的逻辑、最小的依赖和最优的向量化性能,精准满足“每行长度 2x、前后半段互为补集、覆盖全部 x 位组合”的要求,是处理此类对称二元结构的标准实践。