python 图形工具加载 csv 文件
python graph-tool load csv file
我正在将 csv 文件中的有向加权图加载到 python 中的图形工具图中。输入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 使其更快,但这仅适用于未加权的图形。有什么建议可以让它更快吗?
我建议您尝试使用 csv 库获得的性能。此示例 returns 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]
这已在 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().
我正在将 csv 文件中的有向加权图加载到 python 中的图形工具图中。输入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 使其更快,但这仅适用于未加权的图形。有什么建议可以让它更快吗?
我建议您尝试使用 csv 库获得的性能。此示例 returns 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]
这已在 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().