【发布时间】:2021-04-17 02:47:19
【问题描述】:
我正在尝试生成仅包含 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,仅包含0s 和1s,这样集合中没有两个序列是相同的。
【问题讨论】:
-
这可能更适合Code Review
-
请讨论想要的和不想要的结果。也许有一个根本不同的解决方案。
-
@Yunnosch 我已经添加了想要的结果。我希望从我所做的编辑中可以清楚地看到不想要的结果。如果没有,我会添加它。谢谢。
-
这是非常低效的。几个例子——除非你有 1000 个独特的序列,否则你会生成新的 1000 个并再次开始检查。和检查 - 你总是检查完整的 1000 对,而不是在第一对相同的序列之后突破。还有更多的改进空间。
-
您可能需要更多地描述可接受和不可接受的结果。因为对于您所描述的,在二进制表示中列出连续递增的数字并将它们打乱是一种解决方案。这只会让你得到“较低的”
batch_size数字。但也许你想填充,使最后一个尽可能接近batch_size -1。如果您不矛盾,我会回答。
标签: python python-3.x performance numpy random