lea*_*ner 6 python random performance numpy python-3.x
我正在尝试生成仅包含0
's 和1
's 的序列。我编写了以下代码,并且可以正常工作。
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
Run Code Online (Sandbox Code Playgroud)
我的batch
变量是数以千计。上面的这个循环大约需要 30 秒才能完成。这是另一个for
循环的数据生成部分,该循环运行了大约 500 次迭代,因此非常慢。有没有更快的方法来生成这个序列列表而不重复?谢谢。
期望的结果是一个batch_size
序列的集合,每个序列的长度dim
只包含0
s 和1
s,这样集合中没有两个序列是相同的。
生成inbatch
中的数字
将这些数字转换为二进制,然后转换为a 和s 的序列。int
range(0, 2**dim + 1)
0
1
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)]
Run Code Online (Sandbox Code Playgroud)
第二个有点快
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))
Run Code Online (Sandbox Code Playgroud)
输出
1.4956848690007973
1.1187048860001596
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
164 次 |
最近记录: |