在高度连接的有向图中循环 - networkx

时间:2017-08-09 15:00:27

标签: python graph-theory networkx

我有一个中等大小的有向图,包含我在networkx内置的大约3000个节点和260000个边。网络主要是传递性的:即,如果a指向b,b指向c,则a指向c。我试图使用simple_cycles algorithm包中的networkx来获取该网络中每个周期的列表(即任何违反传递性的行为)。

为此,我运行

l = nx.simple_cycles(G)
cycle_list = list(l)

其中G是网络。

我正在解决第二行无法完成的问题(我已经让它运行了24小时)。当我将算法应用于原始网络的2100节点的子集时,运行大约需要4秒钟。

知道瓶颈在哪里以及我可以做些什么来修复它以便快速运行。

更新:创建方法

df = pd.read_csv('epsilon_djordje.csv')
edges =  [tuple([df['i'][x],df['j'][x]]) if df['f.i.j'][x] > 0    else tuple([df['j'][x],df['i'][x]]) if df['f.i.j'][x] < 0 else     tuple([0,0]) for x in range(0,len(df))]
edges = list(set(edges))
edges.remove(tuple([0,0]))
G = nx.DiGraph(edges)

作为参考:

df ['i']是一列字符串(对应于节点)。 df ['j']是一列字符串(对应于节点)。 df ['f.i.j']是一列浮点数(确定两个节点之间边缘的方向)。

0 个答案:

没有答案