给定节点数和边数,如何生成随机图?

Kus*_*ain 6 python random igraph

我正在使用python与igraph库:

from igraph import *
g = Graph()
g.add_vertices(4)
g.add_edges([(0,2),(1,2),(3,2)])
print g.betweenness()
Run Code Online (Sandbox Code Playgroud)

我想生成一个包含10000个节点和100000个边的随机图.边缘可以是随机的.请建议一种随机边缘的方法(使用numpy.random.rand)

Tam*_*más 14

你必须使用numpy.random.rand?如果没有,只需使用Graph.Erdos_Renyi,它允许您直接指定节点和边的数量:

g = Graph.Erdos_Renyi(n=10000, m=100000)
Run Code Online (Sandbox Code Playgroud)


bab*_*unk 0

要使用 来执行此操作numpy.random.rand,请生成随机数组,用所需的概率对其进行阈值处理,然后将其传递给Graph.Adjacency

adj = numpy.random.rand(edges, edges)
adj[adj > 0.999] = 1 # sets everything over 0.999 to 1
adj[adj <= 0.999] = 0 # sets everything below to 0
graph = Graph.Adjacency(adj)
Run Code Online (Sandbox Code Playgroud)

这会生成一个有向图,其中 adj[i, j] 告诉您是否存在从 i -> j 的边。如果您想要一个无向的,请使用- 那么如果 或之一Graph.Ajacency(adj, ADJ_UNDIRECTED)就会有一条边。adj[i, j] == 1adj[j, i] == 1

这并不能保证为您提供恰好 100,000 个边缘 - 您需要吗?