Hello Nick, This is a bug -- or well, not exactly a bug since I was aware of it but did not have the time to implement it properly yet. The find() method of VertexSeq and EdgeSeq objects are a bit convoluted; basically, the handling of positional arguments for find() and select() are implemented in C, but the handling of keyword arguments would have been too complex to do in C so those are implemented in Python. Therefore, g.vs.find(i) goes down to the C layer, figures out that you have passed a single string so it does a dictionary lookup and returns the vertex that it has found. In contrast, g.vs.find(name=i) just translates the call to g.vs.select(name=i)[0], and select() does *not* do a dictionary lookup (because theoretically there could be more than one vertex with the same name.
The obvious workaround would be to make "name" and "name_eq" a special case in find() so these calls do not get forwarded to select(). If you feel like submitting a quick patch for it, let me know -- otherwise I'll try to find some time to implement this during the holidays. All the best, T. On 12/23, Nick Eubank wrote: > Hi All, > > I've been working with a relatively large graph, and have been having some > trouble with the find() command. In particular, I'm finding the following > two commands run at very, very different speeds (on a toy graph with > 100,000 users and 1,000,000 nodes -- my actual graph has same problem, but > is 100x larger). > > Blazing fast: > > for i in g.vs['name']: > > g.vs.find(i) > > Very, very slow : > > for i in g.vs['name']: > > g.vs.find(name = i) > > And yes, all names are strings, so this isn't the case one is querying by > index and the other by names. > > Is there a reason why? My understanding was taht these were supposed to be > equivalent (as suggested in the tutorial - > http://igraph.org/python/doc/tutorial/tutorial.html ). I can work around, > but wasn't sure if this was a bug or not, so thought I'd bring it up! > > Thanks! > > Nick > _______________________________________________ > igraph-help mailing list > [email protected] > https://lists.nongnu.org/mailman/listinfo/igraph-help -- T. _______________________________________________ igraph-help mailing list [email protected] https://lists.nongnu.org/mailman/listinfo/igraph-help
