Hi, sorry for my naive question. I'd like to import hundreds of large and dense adjacency matrices available as a numpy arrays into graph_tool. The following option takes very long. Q1: Is there a preferable alternative? import graph_tool.all as gt import numpy as np adj=np.array([[1,1,0],[1,1,0],[0,0,1]]) n_vertices=adj.shape[0] g = gt.Graph(directed=False) vlist = g.add_vertex(n_vertices) edge_ids = np.where(adj !=0) for i in range(edge_ids[0].shape[0]): g.add_edge(g.vertex(edge_ids[0][i]), g.vertex(edge_ids[1][i])) Since I am dealing with undirected graphs without selfloops a first step would be to take only one triangle of the symmetric adjacency matrix: # get ids of upper triangle upper_tr = np.triu_indices_from(np.zeros((n_vertices,n_vertices))) adj[a[0],a[1]] = 0 ... Q2: is this a valid approach? Thanks in advance, Matthias