You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python生成指定数量的唯一随机图弧对?

生成无重复有向弧的几种可行方法

针对你的需求,np.random.randint本身是独立随机抽样,没办法直接避免重复弧,这里提供两种实用的解决思路:

方法一:全量生成后随机抽样(适合需求弧数接近总可能弧数的场景)

先生成所有符合要求的有向弧,再随机打乱后取前na条,从根源避免重复:

import numpy as np

nv = 3
na = 5

# 生成所有不含自环的有向弧(若允许自环,移除if i != j即可)
all_valid_arcs = np.array([(i, j) for i in range(nv) for j in range(nv) if i != j])
# 随机打乱顺序
np.random.shuffle(all_valid_arcs)
# 选取前na条唯一弧
unique_arcs = all_valid_arcs[:na]
print(unique_arcs)

方法二:集合去重+循环生成(适合需求弧数远小于总可能弧数的场景)

用集合存储已生成的弧(集合天然去重),循环生成直到凑够na条,内存占用更低:

import numpy as np

nv = 3
na = 5
generated_arcs = set()

while len(generated_arcs) < na:
    # 生成单条弧,转成元组才能存入集合
    new_arc = tuple(np.random.randint(nv, size=2))
    # 若允许自环,移除下面的判断
    if new_arc[0] != new_arc[1]:
        generated_arcs.add(new_arc)

# 转成numpy数组格式
unique_arcs = np.array(list(generated_arcs))
print(unique_arcs)

补充说明

  • 若你的场景允许自环(即弧的起点和终点相同,比如[2,2]),只需移除两段代码中的if i != j/if new_arc[0] != new_arc[1]判断即可。
  • 两种方法的选择:当na接近总可能弧数(比如nv=100,na=9000)时,用方法一效率更高;当na远小于总弧数(比如nv=100,na=10)时,方法二更省内存。

内容的提问来源于stack exchange,提问作者TK99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 15:35:20