全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

生成指定长度的0-1组合数组:构造每行含x个1和x个0的所有唯一排列

本文介绍如何使用numpy与itertools高效生成所有长度为2x、且恰好包含x个1和x个0的二进制行向量组成的二维数组,适用于组合枚举、约束排列生成等场景。

您提供的示例中,当 x=2 时输出4行、每行4列(即 2*x=4),且每行恰好含两个1和两个0;同理,x=3 时每行6列、含三个1和三个0。但需注意:原始答案中使用的 np.column_stack([a, 1 - a]) 实际生成的是「前x位与后x位互补」的结构(如 [0,1,1,0]),这虽满足总长2x、总和为x,但并非穷举所有含x个1的组合——它仅覆盖了“前半段任意、后半段取反”的子集(共 2^x 种),而完整组合数应为 C(2x, x)(例如 x=3 时为 C(6,3)=20,但示例只列出8行)。

因此,正确解法应分为两类需求:

✅ 需求一:生成所有长度为 2x、恰含 x 个 1 的二进制向量(完整组合)

推荐使用 itertools.combinations 枚举 1 的位置索引,再用 NumPy 构造稀疏行:

import numpy as np
from itertools import combinations

def binary_arrays_with_x_ones(x):
    n = 2 * x
    # 生成所有从 [0, 1, ..., 2x-1] 中选 x 个位置置1的组合
    ones_positions = list(combinations(range(n), x))
    # 初始化全零数组
    arr = np.zeros((len(ones_positions), n), dtype=int)
    # 向每行对应位置填1
    for i, pos in enumerate(ones_positions):
        arr[i, list(pos)] = 1
    return arr

# 示例:x = 2 → 输出 6 行(C(4,2)=6),非原题所示4行
print(binary_arrays_with_x_ones(2))
# [[1 1 0 0]
#  [1 0 1 0]
#  [1 0 0 1]
#  [0 1 1 0]
#  [0 1 0 1]
#  [0 0 1 1]]
⚠️ 注意:原问题示例输出仅含4行(x=2)或8行(x=3),实为 “前x位任意,后x位为前x位的按位取反” 的特殊结构(即 a + (1-a) 拼接),其本质是 2^x 种模式,而非 C(2x,x)。若此结构即您的真实需求,则原始答案正确:

✅ 需求二:生成“前x位任意、后x位为其逻辑反”的数组(即 a | (1-a) 拼接)

from itertools import product
import numpy as np

def binary_arrays_complementary(x):
    # 生成所有长度为x的0-1组合
    a = np.array(list(product([0, 1], repeat=x)))
    # 拼接:前x位为a,后x位为1-a(逐元素取反)
    return np.hstack([a, 1 - a])

print(binary_arrays_complementary(2))
# [[0 0 1 1]
#  [0 1 1 0]
#  [1 0 0 1]
#  [1 1 0 0]]

该结果与您原始答案一致,但顺序和数值与题干示例不完全匹配(题干以 [1,0,1,0] 开头,而此处以 [0,0,1,1] 开头)。可通过排序或自定义排列调整,例如按字典序逆序或按特定模式筛选。

? 总结与建议

  • 若目标是数学意义上的所有含x个1的2x维二进制向量 → 用 combinations(range(2*x), x)(推荐,完备且直观);
  • 若目标是前后对称互补结构(如编码中的自反码) → 用 product([0,1], repeat=x) 拼接取反;
  • 避免 np.meshgrid 或盲目 product(*[[0,1]]*2x)(会生成 2^(2x) 行,远超需求,且需后过滤);
  • 对于大 x(如 x > 15),内存敏感场景建议使用生成器替代 list(...),或借助 numba/dask 加速。

最终选择取决于您的实际约束条件——请优先确认:是否必须严格满足“每行1的数量 = x”,还是仅需满足“前x位 + 后x位互为补集”这一更强对称性。


# 编码  # 排列  # numpy  # 您的  # 长度为  # 的是  # 穷举  # 这一  # 推荐使用  # 适用于  # 自定义  # 为其  # 所示 


相关文章: 如何快速生成凡客建站的专业级图册?  北京的网站制作公司有哪些,哪个视频网站最好?  如何在Golang中使用encoding/gob序列化对象_存储和传输数据  如何在Windows环境下新建FTP站点并设置权限?  如何配置支付宝与微信支付功能?  建站VPS配置与SEO优化指南:关键词排名提升策略  山东网站制作公司有哪些,山东大源集团官网?  宝塔建站助手安装配置与建站模板使用全流程解析  ,制作一个手机app网站要多少钱?  如何在阿里云购买域名并搭建网站?  浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?  如何在景安服务器上快速搭建个人网站?  专业公司网站制作公司,用什么语言做企业网站比较好?  上海网站制作开发公司,上海买房比较好的网站有哪些?  在线制作视频网站免费,都有哪些好的动漫网站?  山东云建站价格为何差异显著?  做企业网站制作流程,企业网站制作基本流程有哪些?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  如何快速搭建二级域名独立网站?  c# 服务器GC和工作站GC的区别和设置  如何快速搭建自助建站会员专属系统?  如何在宝塔面板创建新站点?  宁波自助建站系统如何快速打造专业企业网站?  如何在七牛云存储上搭建网站并设置自定义域名?  如何在云虚拟主机上快速搭建个人网站?  赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?  如何在腾讯云免费申请建站?  建站之星Pro快速搭建教程:模板选择与功能配置指南  香港服务器部署网站为何提示未备案?  如何零基础在云服务器搭建WordPress站点?  网站制作话术技巧,网站推广做的好怎么话术?  海南网站制作公司有哪些,海口网是哪家的?  婚礼视频制作网站,学习*后期制作的网站有哪些?  如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  上海网站制作网站建设公司,建筑电工证网上查询系统入口?  广州顶尖建站服务:企业官网建设与SEO优化一体化方案  如何确保西部建站助手FTP传输的安全性?  头像制作网站在线制作软件,dw网页背景图像怎么设置?  建站之星北京办公室:智能建站系统与小程序生成方案解析  天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?  制作网站公司那家好,网络公司是做什么的?  制作宣传网站的软件,小红书可以宣传网站吗?  如何快速上传自定义模板至建站之星?  如何用搬瓦工VPS快速搭建个人网站?  如何快速生成橙子建站落地页链接?  c# 在ASP.NET Core中管理和取消后台任务  建站之星官网登录失败?如何快速解决?  如何用y主机助手快速搭建网站?  广州商城建站系统开发成本与周期如何控制? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。