That's assuming you really need to loop through the edges, and that getting
edges from masked graphs won't do.
On Jul 19, 2014 12:01 PM, "..." <[email protected]> wrote:

> Well, if you build a list of edge objects before hand, you can get and set
> properties from maps quickly all day, or until you create or destroy edges
> is the graph and have to rebuild the list.  If building that list takes a
> long time and you're changing edges often, you could use property map masks
> to keep track of new and deleted edges and add to and subtract from the
> list.
>
> Elliot
> On Jul 19, 2014 2:21 AM, "Flavien Lambert" <[email protected]> wrote:
>
>> Thanks a lot for the explanation! So is there a best way to have access
>> to the properties?
>>
>>
>> On 18 July 2014 21:39, Tiago de Paula Peixoto <[email protected]> wrote:
>>
>>> On 07/16/2014 05:44 PM, Flavien Lambert wrote:
>>> > On the same topic, I did not find the function for getting the edge
>>> > from the edge index. There is one for vertices like vertex(n) but for
>>> > edges?
>>>
>>> There is no such function, and this is related to the speed difference
>>> you are seeing. The edges are not stored in one big vector, and thus
>>> cannot be addressed simply by its index. Instead, they are stored in
>>> different vectors across all nodes (i.e. and adjacency list), and thus
>>> one needs to iterate first through the vectors.
>>>
>>> Now lets look at your code:
>>>
>>> > _edges = [_e for _e in _network.edges()]
>>> > %time for _e in _network.edges() : a = _speeds[_e]
>>> >
>>> > _speedDict = {}
>>> > for _e in _edges :
>>> >     _speedDict[_network.edge_index[_e]] = _speeds[_e]
>>> > _indexes = [_network.edge_index[_e] for _e in _network.edges()]
>>> > %time for _n in _indexes : a = _speedDict[_n]
>>>
>>> What makes the second loop slower has little to do with property maps vs
>>> dicts, but instead with the loop over the Graph.edges() iterator and the
>>> loop ofter the list you created in the second part. Whenever you loop
>>> over the edges, not only is the loop slightly slower because it is not a
>>> simple list, but a "list of lists", but also (more importantly) because
>>> it has to *create* edge descriptor objects at each iteration! In the
>>> second loop you created these objects and stored them in a list, and
>>> then looped over this list, which does not involve object creation, and
>>> is therefore much faster.
>>>
>>> Best,
>>> Tiago
>>>
>>> --
>>> Tiago de Paula Peixoto <[email protected]>
>>>
>>>
>>> _______________________________________________
>>> graph-tool mailing list
>>> [email protected]
>>> http://lists.skewed.de/mailman/listinfo/graph-tool
>>>
>>>
>>
>> _______________________________________________
>> graph-tool mailing list
>> [email protected]
>> http://lists.skewed.de/mailman/listinfo/graph-tool
>>
>>
_______________________________________________
graph-tool mailing list
[email protected]
http://lists.skewed.de/mailman/listinfo/graph-tool

Reply via email to