Numpy:生成2个n个随机数的序列,没有重叠

2024-03-29 15:37:19 发布

您现在位置:Python中文网/ 问答频道 /正文

对于n = 5,[0,2]中的两个随机整数序列可能如下所示:

 l1 = [2, 0, 2, 2, 0]
 l2 = [0, 1, 2, 2, 2]

我想确保l1[i] != l2[i]对于所有i。我当前的方法(循环所有值并替换重叠)似乎很笨拙:

n = 5
sample = np.arange(3)
l1 = np.random.choice(sample, size=n)
l2 = np.random.choice(sample, size=n)
mask = np.ones(sample.size, dtype=bool)
for i in xrange(n):
    if l1[i] == l2[i]:
        mask[l1[i]] = False
        l2[i] = np.random.choice(sample[mask])
        mask[l1[i]] = True

有没有更好的办法?你知道吗


Tags: sample方法l1sizenpones序列mask
1条回答
网友
1楼 · 发布于 2024-03-29 15:37:19

一种方法是计算l1,然后为每个元素计算一组距离或偏移量,并确保偏移量不能为0:

ofs = l2 = np.random.choice(sample[:-1], size=n)+1

然后可以将这些偏移量添加到l1,并将结果包装回范围:

l2 = (l1 + ofs) % (sample[-1] + 1)

相关问题 更多 >