Il giorno gio, 20/03/2014 alle 12.52 +0100, Tiago de Paula Peixoto ha scritto:
[...] I have now just added a Graph.add_edge_list() to the git version, which takes a list of edges to be added, which can be a numpy array. If you have a full adjacency matrix instead of an edge list, you can do simply:
g.add_edge_list(transpose(nonzero(a)))
This should be much faster than the Python loop above.
I think there is some problem with add_edge_list. The following code: --------------------------------------------------------- from scipy import array from graph_tool import Graph from graph_tool.draw import graph_draw def blocks_star(transpose=False): g = Graph() members = array([0,1,2]) edges_list = array([[0,1,2], [2,0,1]]).transpose() edges_list_2 = array([[0,2],[1,0],[2,1]]) print edges_list print edges_list_2 print all(edges_list == edges_list_2) if transpose: g.add_edge_list(edges_list) else: g.add_edge_list(edges_list_2) graph_draw(g) --------------------------------------------------------- gives me a different result if called with True or False as argument (with True, the resulting graph is disconnected), while the edges lists are clearly identical. I guess this has to do with the fact that transposing, for numpy, is just a change of view, not a relocation of elements... but I see your code is based on boost, which I have no experience with. I am using package python-graph-tool 2.2.31-1 from your Debian sid repositories. By the way: why "add_edge_list" rather than "add_edges_list"? True, "add_vertex" can add multiple vertices, but then there is "clear_edges". Not really crucial issue, but... later it would be too late to raise it! Cheers, Pietro