Python中唯一的随机数对集合



我有一个未知的图,其中向量的数量是nv,弧的数量是na。我想用Python随机确定na唯一的弧线。

我第一次尝试这样做没有唯一的约束,似乎工作:

np.random.randint(nv, size=(na,2))

如果我有3个顶点,想要5个圆弧,这会产生:

array([[2, 2],
[2, 1],
[1, 0],
[0, 1],
[2, 1]])

产生两次电弧[2,1]。因此,我希望我的脚本能够识别已经随机选择的弧线,然后选择一个新的唯一的随机弧线。然而,我似乎无法确定这是否可能使用randint。我应该用别的方式来处理这件事吗?

您可以使用np.random.choice:

生成包含组合和示例唯一值的数组。
import numpy as np
N = 3
S = 5
out = np.mgrid[0:N, 0:N].reshape(2, -1).T[np.random.choice(N**2, S, replace=False)]

输出:

array([[1, 0],
[2, 0],
[2, 1],
[0, 0],
[2, 2]])

使用排列代替:

from itertools import permutations 
import random
na = 5 #5 arcs
nv = 3 #3 vertices 
#generate all the permutations of possible linked nodes in the form [i, j] 
perm = permutations([n for n in range(nv)], 2)
#randomly select na of them
random.sample(list(perm), na)

输出
[(2, 1), (0, 2), (1, 0), (0, 1), (1, 2)]

最新更新