我有一个定向加权网络存储在 txt 文件中,作为3个元素的列表:
node1 node2 weight
node1 node3 weight
...
例如三元组:
1 10 50
表示我在节点1和节点10之间获得了权重为50的边缘。
有人可以详细解释如何将其导入图表工具以使用SBM执行社区检测分析。
非常感谢。
答案 0 :(得分:1)
我认为对于加权图表,您希望使用PropertyMaps(https://graph-tool.skewed.de/static/doc/quickstart.html#sec-property-maps)?
要导入文件,您将要使用文件对象(https://docs.python.org/3/tutorial/inputoutput.html)。
总之,您需要的代码如下:
#imports the graph-tools library
from graph_tool.all import *
#opens your file in mode "read"
f = open("your_file.txt","r")
#splits each line into a list of integers
lines = [[int(n) for n in x.split()] for x in f.readlines()]
#closes the file
f.close()
#makes the graph
g = Graph()
#adds enough vertices (the "1 + " is for position 0)
g.add_vertex(1 + max([l[0] for l in lines] + [l[1] for l in lines]))
#makes a "property map" to weight the edges
property_map = g.new_edge_property("int")
#for each line
for line in lines:
#make a new edge
g.add_edge(g.vertex(line[0]),g.vertex(line[1]))
#weight it
property_map[g.edge(g.vertex(line[0]),g.vertex(line[1]))] = line[2]
答案 1 :(得分:1)
graph_tool.load_graph_from_csv(file_name, csv_options={'delimiter': ' ', 'quotechar': '"'})
这将帮助您使用delimiter = space加载一个csv文件。我仍在尝试阅读有关如何将权重与边缘相关联的文档:https://graph-tool.skewed.de/static/doc/graph_tool.html?highlight=load#graph_tool.Graph.load