Thanks for the quick response Thiago!

In this code all the edges and vertices are created by graph-tool and the result is something much faster...
   is this the best I can do?

It's somewhat annoying to have to keep track of the vertices that will be created like this:

def graph_tool_create_all_at_once():
  """ Create a graph_tool graph given a list of pairs. """
  G = Graph(directed=False)
  objectTOi = {}
  vertexpairs = []
  counter = 0
  for o1,o2 in get_pairs_of_ints():
    if(o1 in objectTOi):
      u = objectTOi[o1]
    else:
      u = counter
      counter += 1
      objectTOi[o1] = u
    if(o2 in objectTOi):
      v = objectTOi[o2]
    else:
      v = counter
      counter += 1
      objectTOi[o2] = v

    vertexpairs.append((u,v))

  G.add_edge_list(vertexpairs)


On 27 April 2015 at 16:39, Tiago de Paula Peixoto <tiago@skewed.de> wrote:
On 27.04.2015 14:29, thekswenson wrote:
> I've been using networkx to simply create a graph and check the connected
> components.  The bottleneck of the operation is the creation of the edges.
>
> I've heard that graph-tool is very efficient so I've replaces the code with
> a graph-tool graph.
> To my surprise, the creation of a graph-tool graph is MUCH slower than that
> of a networkx graph.
>
> Am I doing something wrong?

How does the performance change if you create the necessary edges
beforehand?

In graph-tool things are faster than in networkx when they are delegated
to C++, otherwise this should be comparable in speed. In the case of
adding many edges, this is done by using the Graph.add_edge_list()
function, which runs in C++ internally. In your example, this should
provide a massive speed-up.

Best,
Tiago

--
Tiago de Paula Peixoto <tiago@skewed.de>


_______________________________________________
graph-tool mailing list
graph-tool@skewed.de
http://lists.skewed.de/mailman/listinfo/graph-tool