NetworkX有向图生成

时间:2018-09-25 08:16:27

标签: python networkx directed-graph

Python的NetworkX中是否有可用的函数来生成随机有向图,其中任意两个相连节点之间的最大欧几里得距离是多少?例如,对于以某个欧几里德距离分隔的节点,这些节点有连接的概率p,对于所有其他距离大于该距离的节点,它们将不会在生成的图中连接。

1 个答案:

答案 0 :(得分:1)

如果您有一个阈值,使得不存在大于阈值的距离,并且所有小于该阈值的边都有概率p,那么您很幸运。 [如果不是所有短边的概率都一样,那仍然可行,但要难一些]

首先建立一个随机几何图G。这是一个图,其节点均匀地随机放置,并且如果两个节点之间的距离彼此都在阈值距离之内,则将两个节点连接在一起。

然后创建一个新的有向图,该图具有G中的边缘的每个方向,概率为p

import networkx as nx
import random
N=100 # 100 nodes
D = 0.2 #threshold distance of 0.2
G = nx.random_geometric_graph(N, D)
H = nx.Digraph()
H.add_nodes_from(G.edges())
p = 0.1  #keep 10% of the edges
for u,v in G.edges():
    if random.random()<p:
        H.add_edge(u,v)
    if random.random()<p:
        H.add_edge(v,u)