对于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


有一个更好的方法吗?

最佳答案

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

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


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

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

关于python - numpy:生成2个n个随机数的序列,且无重叠,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36230152/

10-12 17:55