在Julia中生成二进制值填充固定向量的所有可迭代组合
Julia生成所有二进制向量的可迭代对象方案
如果需要生成长度为n的二进制向量的所有可能(共2^n种),且保留所有重复元素的组合、不去重,这里有两种简洁的惰性迭代方案:
方案一:利用Iterators.product
Iterators.product可以生成多个集合的笛卡尔积,完全保留所有组合,不会移除任何"退化排列",正好匹配需求:
using Iterators n = 4 # 替换成你的目标向量长度 # 生成n个[0,1]集合的笛卡尔积迭代器 binary_iter = Iterators.product(fill([0,1], n)...)
遍历迭代器时,每个元素是元组,可通过collect()转为向量:
for tup in binary_iter vec = collect(tup) # 在这里添加你的筛选逻辑,满足条件再存入矩阵 # 示例:if sum(vec) == 2; push!(matrix, vec); end end
方案二:位运算转换(无需额外包)
通过遍历0到2^n - 1的整数,将每个数转为二进制向量,同样是惰性迭代实现:
n = 4 # 生成迭代器,每个元素是长度为n的二进制向量 binary_iter = (reverse(digits(x, base=2, pad=n)) for x in 0:2^n - 1)
直接遍历即可得到向量:
for vec in binary_iter # 执行你的筛选逻辑 end
两种方案都是惰性求值,不会一次性生成所有向量,能在筛选阶段就跳过不符合条件的元素,节省内存,完美适配"先筛选再存入矩阵"的场景。
内容的提问来源于stack exchange,提问作者HenryS
相关产品推荐
相关产品推荐

