我有一个中等大小的有向图,包含我在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']是一列浮点数(确定两个节点之间边缘的方向)。