Create a weighted graph from an adjacency matrix in graph-tool, python interface
Graph-tool now includes a function to add a list of edges to the graph. You can now do, for instance:
import graph_tool as gt
import numpy as np
g = gt.Graph(directed=False)
adj = np.random.randint(0, 2, (100, 100))
g.add_edge_list(np.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
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()))