Python Graph-Tool加载CSV文件

4
我正在使用Python将CSV文件中的有向加权图加载到graph-tool图形中。输入CSV文件的组织方式如下:
1,2,300
2,4,432
3,89,1.24
...
其中,每行的前两个条目标识边的源和目标,第三个数字是边的权重。
目前,我正在使用:
g = gt.Graph()
e_weight = g.new_edge_property("float")
csv_network = open (in_file_directory+ '/'+network_input, 'r')
csv_data_n = csv_network.readlines()
for line in csv_data_n:
    edge = line.replace('\r\n','')
    edge = edge.split(delimiter)
    e = g.add_edge(edge[0], edge[1])
    e_weight[e] = float(edge[2])

然而,加载数据需要相当长的时间(我有一张包含1000万个节点的网络图,需要约45分钟)。我尝试通过使用g.add_edge_list来加速,但是它只适用于无权图。请问有什么建议可以让加载速度更快吗?

2个回答

4

这个问题在graph-tool的邮件列表中已经得到了回答:

http://lists.skewed.de/pipermail/graph-tool/2015-June/002043.html

简单来说,你应该使用函数g.add_edge_list(),如你所说,并用属性映射数组接口分别放置权重:

e_weight.a = weight_list

权重列表应与您传递给g.add_edge_list()的边具有相同的顺序。

0

我建议您尝试使用csv库获得的性能。此示例返回edge,其中包含3个参数的列表。

import csv

reader = csv.reader(open(in_file_directory+ '/'+network_input, 'r'), delimiter=",")

for edge in reader:
    if len(edge) == 3:
        edge_float = [float(param) for param in edge]

所以你将得到以下内容来处理...

edge_float = [1.0, 2.0, 300.0]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接