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

如何在Python中生成二进制计数器数组?求非多层循环实现方案

生成任意位数全二进制组合矩阵的替代方法

你目前用四层嵌套循环实现了4位全二进制组合的矩阵生成,但位数增加时循环层数也会跟着增多,这里提供几个更简洁、可扩展的实现方式,不用手动写多层循环:

方法1:利用numpy的binary_repr实现

通过整数转二进制字符串的方式,直接生成所有组合,支持任意位数:

import numpy as np

bits = 4  # 可修改为任意需要的位数
total_combinations = 2 ** bits

# 生成0到total_combinations-1的整数,转成指定长度的二进制字符串后拆分转成整数数组
matrix = np.array([list(np.binary_repr(num, width=bits)) for num in range(total_combinations)], dtype=int)
print(matrix)

原理:np.binary_repr(num, width=bits)会把整数num转为固定长度的二进制字符串(不足补前导零),再将每个字符转为整数,最终拼接成矩阵。

方法2:用numpy的meshgrid生成笛卡尔积

meshgrid可以自动生成多维网格,无需手动嵌套循环,适合理解组合的本质:

import numpy as np

bits = 4
# 为每个二进制位生成[0,1]的取值列表,重复bits次
dimensions = [np.array([0, 1]) for _ in range(bits)]
# 生成笛卡尔积并调整为每行一个组合的矩阵格式
matrix = np.array(np.meshgrid(*dimensions)).T.reshape(-1, bits)
print(matrix)

原理:np.meshgrid(*dimensions)生成多维网格,转置后通过reshape将多维结构转为二维矩阵,不管bits是多少,只需修改这个参数即可。

方法3:用Python标准库itertools.product

如果先熟悉Python基础库,itertools.product可以直接生成所有组合的笛卡尔积:

import numpy as np
from itertools import product

bits = 4
# product直接生成[0,1]重复bits次的所有组合,转成numpy数组
matrix = np.array(list(product([0, 1], repeat=bits)))
print(matrix)

原理:product([0,1], repeat=bits)会生成所有可能的组合迭代器,转成列表后再转为numpy数组即可,代码最简洁。


原代码及输出

原代码:

import numpy as np
a = []
for x in range(2):
    for y in range(2):
        for z in range(2):
            for w in range(2):
             a.append([x,y,z,w])
a = np.array(a)
print(a)

输出:

[[0 0 0 0]
 [0 0 0 1]
 [0 0 1 0]
 [0 0 1 1]
 [0 1 0 0]
 [0 1 0 1]
 [0 1 1 0]
 [0 1 1 1]
 [1 0 0 0]
 [1 0 0 1]
 [1 0 1 0]
 [1 0 1 1]
 [1 1 0 0]
 [1 1 0 1]
 [1 1 1 0]
 [1 1 1 1]]

内容的提问来源于stack exchange,提问作者Dordini Balbozhia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 16:10:33