gpt4 book ai didi

python - 生成不重复的二进制序列

转载 作者:行者123 更新时间:2023-12-03 14:13:03 26 4
gpt4 key购买 nike

我正在尝试生成仅包含 0 的序列的和 1的。我已经编写了以下代码,并且可以正常工作。

import numpy as np

batch = 1000
dim = 32

while 1:
is_same = False
seq = np.random.randint(0, 2, [batch, dim])
for i in range(batch):
for j in range(i + 1, batch):
if np.array_equal(seq[i], seq[j]):
is_same = True
if is_same:
continue
else:
break
我的 batch变量以千计。上面的这个循环大约需要 30 秒才能完成。这是另一个 for的数据生成部分循环运行大约 500 次迭代,因此非常慢。有没有更快的方法来生成这个序列列表而不重复?谢谢。
想要的结果是 batch_size 的集合每个长度的序列数 dim仅包含 0 s 和 1 s 使得集合中没有两个序列是相同的。

最佳答案

生成 batch数量intrange(0, 2**dim + 1)将这些数字转换为二进制,然后转换为 0 的序列和 1 s。

from random import sample

def generate(batch, dim):
my_sample = [f'{n:0>32b}' for n in sample(range(2**dim+1), batch)]
return [[int(n) for n in item] for item in my_sample]

def generate2(batch, dim):
return [list(map(int, f'{n:0>32b}')) for n in sample(range(2**dim+1), batch)]
第二个要快一点
from timeit import timeit
print(timeit("generate(1000, 32)", setup="from __main__ import generate", number=100))
print(timeit("generate2(1000, 32)", setup="from __main__ import generate2", number=100))
输出
1.4956848690007973
1.1187048860001596

关于python - 生成不重复的二进制序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65679065/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com