Create a weighted graph from an adjacency matrix in graph-tool, python interface
graph, graph-tool, python
Solution
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()))
Problem
How should I create a graph using graph-tool in python, out of an adjacency matrix? Assume we have `adj` matrix as the adjacency matrix. What I do now is like this: ``` g = graph_tool.Graph(directed = False) g.add_vertex(len(adj)) edge_weights = g.new_edge_property('double') for i in range(adj.shape[0]): for j in range(adj.shape[1]): if i > j and adj[i,j] != 0: e = g.add_edge(i, j) edge_weights[e] = adj[i,j] ``` But it doesn't feel right, do we have any better solution for this? (and I guess a proper tag for this would be `graph-tool`, but I can't add it, some kind person with enough privileges could make the tag?)