我有一个未知的图,其中向量的数量是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)]