networkx 中边缘列表的自定义输出
Custom output of edgelist in networkx
我正在尝试实施 tarjan 的算法进行练习。
我决定生成一个随机图作为算法的输入,一次添加一条边。
我生成了随机图并保存在文件中,如下图
from networkx import *
import sys
import matplotlib.pyplot as plt
n = 10 # 10 nodes
m = 20 # 20 edges
G = gnm_random_graph(n, m)
# print the adjacency list to a file
try:
nx.write_edgelist(G, "test.edgelist", delimiter=',')
except TypeError:
print "Error in writing output to random_graph.txt"
fh = open("test.edgelist", 'rb')
G = nx.read_adjlist(fh)
fh.close()
我在 test.edgelist 文件中得到的输出是这样的。
0,4,{}
0,5,{}
0,6,{}
1,8,{}
1,3,{}
1,4,{}
1,7,{}
2,8,{}
2,3,{}
2,5,{}
3,8,{}
3,7,{}
4,8,{}
4,9,{}
5,8,{}
5,9,{}
5,7,{}
6,8,{}
6,7,{}
7,9,{}
然而,在我实现的 tarjan 算法中,输入的格式为
add_edge(1,2)
add_edge(2,3)
....
我希望在循环中使用随机生成的图形作为输入。
我怎么没有得到 {}?
另外,如果有更好的方法来实现这个,请帮忙,因为对于一个庞大的数据集,很难将它保存在一个列表中(add_edge() 将边缘添加到列表中)
您必须通过将 data
参数设置为 False
:
来删除所有边缘数据
nx.write_edgelist(G, "test.edgelist", delimiter=',', data = False)
输出:
0,3
0,4
0,1
0,8
0,6
0,7
但是,如果您想以自己的格式保存边缘,请使用如下循环:
from networkx import gnm_random_graph
n = 10 # 10 nodes
m = 20 # 20 edges
G = gnm_random_graph(n, m)
# iterate over all edges
with open('./test.edgelist', 'w') as f:
for edge in G.edges():
f.write("add_edge{0}\n".format(edge))
输出:
add_edge(0, 7)
add_edge(0, 4)
add_edge(0, 8)
add_edge(0, 3)
add_edge(0, 2)
add_edge(1, 5)
add_edge(1, 6)
add_edge(1, 7)
add_edge(2, 5)
add_edge(2, 4)
add_edge(2, 9)
add_edge(2, 8)
add_edge(2, 3)
add_edge(3, 9)
add_edge(3, 5)
add_edge(4, 9)
add_edge(4, 7)
add_edge(5, 9)
add_edge(6, 9)
add_edge(7, 9)
我正在尝试实施 tarjan 的算法进行练习。 我决定生成一个随机图作为算法的输入,一次添加一条边。
我生成了随机图并保存在文件中,如下图
from networkx import *
import sys
import matplotlib.pyplot as plt
n = 10 # 10 nodes
m = 20 # 20 edges
G = gnm_random_graph(n, m)
# print the adjacency list to a file
try:
nx.write_edgelist(G, "test.edgelist", delimiter=',')
except TypeError:
print "Error in writing output to random_graph.txt"
fh = open("test.edgelist", 'rb')
G = nx.read_adjlist(fh)
fh.close()
我在 test.edgelist 文件中得到的输出是这样的。
0,4,{}
0,5,{}
0,6,{}
1,8,{}
1,3,{}
1,4,{}
1,7,{}
2,8,{}
2,3,{}
2,5,{}
3,8,{}
3,7,{}
4,8,{}
4,9,{}
5,8,{}
5,9,{}
5,7,{}
6,8,{}
6,7,{}
7,9,{}
然而,在我实现的 tarjan 算法中,输入的格式为
add_edge(1,2)
add_edge(2,3)
....
我希望在循环中使用随机生成的图形作为输入。
我怎么没有得到 {}? 另外,如果有更好的方法来实现这个,请帮忙,因为对于一个庞大的数据集,很难将它保存在一个列表中(add_edge() 将边缘添加到列表中)
您必须通过将 data
参数设置为 False
:
nx.write_edgelist(G, "test.edgelist", delimiter=',', data = False)
输出:
0,3
0,4
0,1
0,8
0,6
0,7
但是,如果您想以自己的格式保存边缘,请使用如下循环:
from networkx import gnm_random_graph
n = 10 # 10 nodes
m = 20 # 20 edges
G = gnm_random_graph(n, m)
# iterate over all edges
with open('./test.edgelist', 'w') as f:
for edge in G.edges():
f.write("add_edge{0}\n".format(edge))
输出:
add_edge(0, 7)
add_edge(0, 4)
add_edge(0, 8)
add_edge(0, 3)
add_edge(0, 2)
add_edge(1, 5)
add_edge(1, 6)
add_edge(1, 7)
add_edge(2, 5)
add_edge(2, 4)
add_edge(2, 9)
add_edge(2, 8)
add_edge(2, 3)
add_edge(3, 9)
add_edge(3, 5)
add_edge(4, 9)
add_edge(4, 7)
add_edge(5, 9)
add_edge(6, 9)
add_edge(7, 9)