I don't know if this is the best idea or not but I definitely have run into this problem before and what I think I did was to store the list of vectors as a *Set* of *lists*.
On Mon, Jan 19, 2009 at 4:43 PM, slabbe <[email protected]> wrote: > > PROBLEM : > In a list of vectors, I want to know if there is a pair of equal > vectors. > > I have two solutions. The first to create an empty list L and append > the vectors one per one. If a vector is already in L before adding it, > then I found a pair of equal vectors. But looking if a vector belongs > to a list is apparently very slow on my computer : > > sage: v = vector((1, SR(0))) > sage: w = vector((1, sqrt(2))) > sage: time v in [v,v,v,v,v,v,v,v,v] > CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s > Wall time: 0.00 s > True > sage: time w in [v] > CPU times: user 0.92 s, sys: 0.20 s, total: 1.12 s > Wall time: 5.17 s > False > sage: time w in [v,v] > CPU times: user 1.86 s, sys: 0.46 s, total: 2.32 s > Wall time: 12.32 s > False > sage: time w in [v,v,v,v] > CPU times: user 4.83 s, sys: 1.14 s, total: 5.97 s > Wall time: 32.42 s > False > > My second solution is to put them in a set. But since vectors are not > hashable, I first convert them into tuples. But I then get two equal > vectors having distinct hash values: > > sage: z = vector((1,sqrt(2)-sqrt(2))); z > (1, 0) > sage: v = vector((1, SR(0))) ; v > (1, 0) > sage: z == v > True > sage: tuple(z) == tuple(v) > True > sage: hash(tuple(z)) > -1374268819 > sage: hash(tuple(v)) > 1302034650 > sage: map(type, z) > [<class 'sage.calculus.calculus.SymbolicConstant'>, > <class 'sage.calculus.calculus.SymbolicArithmetic'>] > sage: map(type, v) > [<class 'sage.calculus.calculus.SymbolicConstant'>, > <class 'sage.calculus.calculus.SymbolicConstant'>] > > Anybody has a better idea? > > Thank you > > Sébastien Labbé > > > > --~--~---------~--~----~------------~-------~--~----~ To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/sage-support URLs: http://www.sagemath.org -~----------~----~----~----~------~----~------~--~---
