vector addition

MRAB python at mrabarnett.plus.com
Sat Jun 5 22:01:00 EDT 2010


GZ wrote:
> Hi,
> 
> I am looking for a fast internal vector representation so that
> (a1,b2,c1)+(a2,b2,c2)=(a1+a2,b1+b2,c1+c2).
> 
> So I have a list
> 
> l = ['a'a,'bb','ca','de'...]
> 
> I want to count all items that start with an 'a', 'b', and 'c'.
> 
> What I can do is:
> 
> count_a = sum(int(x[1]=='a') for x in l)
> count_b = sum(int(x[1]=='b') for x in l)
> count_c = sum(int(x[1]=='c') for x in l)
> 
> But this loops through the list three times, which can be slow.
> 
> I'd like to have something like this:
> count_a, count_b, count_c =
> sum( (int(x[1]=='a',int(x[1]=='b',int(x[1]=='c')   for x in l)
> 
> I hesitate to use numpy array, because that will literally create and
> destroy a ton of the arrays, and is likely to be slow.
> 
If you want to do vector addition then numpy is the way to go. However,
first you could try:

     from collections import defaultdict
     counts = defaultdict(int)
     for x in l:
         counts[x[0]] += 1

(Note that in Python indexes are zero-based.)



More information about the Python-list mailing list