Create a weighted graph from an adjacency matrix in graph-tool, python interface

此生再无相见时 提交于 2019-12-03 03:24:06

Graph-tool now includes a function to add a list of edges to the graph. You can now do, for instance:

adj = numpy.random.randint(0, 2, (100, 100)) # a random directed graph
g = Graph()
g.add_edge_list(transpose(adj.nonzero()))

This should be a comment to Tiago's answer, but I don't have enough reputation for that.

For the latest version (2.26) of graph_tool I believe there is a missing transpose there. The i,j entry of the adjacency matrix denotes the weight of the edge going from vertex j to vertex i, so it should be

g.add_edge_list(transpose(transpose(adj).nonzero()))

this is the extension of Tiago's answer for the weighted graph:

adj = numpy.random.randint(0, 10, (100, 100)) # a random directed graph
idx = adj.nonzero()
weights = adj[idx]
g = Graph()
g.add_edge_list(transpose(idx)))

#add weights as an edge propetyMap
ew = g.new_edge_property("double")
ew.a = weights 
g.ep['edge_weight'] = ew
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!