Mandus wrote:
> Tue, 20 Dec 2005 19:32:13 +0530 skrev Suresh Jeevanandam:
> 
>>Hi all,
>>      Lets say I have an array:
>>      from numarray import *
>>      a = array([ 6,  7,  8,  9, 10, 11, 12])
>>
>>      I want to multiply out all the elements and get the result.
>>      
>>      r = 1.0
>>      for i in a:
>>              r = r*i
>>
>>      Is there any faster, efficient way of doing this.
> 
> 
> You can use multiply.reduce(a) (multiply is a function imported from
> numarray).
> 
> With regular python you can also do:
> 
> from operator import mul
> reduce(mul,a)
> 
> This work even when 'a' is a plain python list.


Actually, they'll both work with a plain python list. Multiply.reduce is 
much faster (see below) when operating on arrays, but somewhat slower 
when operating on lists. I'd guess from the overhead of converting the 
list to an array.

-tim


 >>> a = na.arange(100000)
 >>> l = range(100000)
 >>> t0 = time.clock(); na.multiply.reduce(a); print time.clock() - t0
0
0.00388960049392
 >>> t0 = time.clock(); na.multiply.reduce(l); print time.clock() - t0
0
0.042208716471
 >>> t0 = time.clock(); reduce(mul, a); print time.clock() - t0
0
0.0943455103931
 >>> t0 = time.clock(); reduce(mul, l); print time.clock() - t0
0
0.0146099574108

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to