Re: Summing a list of real numbers
- To: mathgroup at smc.vnet.net
- Subject: [mg33444] Re: [mg33416] Summing a list of real numbers
- From: gleam at flashmail.com (Paul)
- Date: Thu, 21 Mar 2002 09:27:34 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
Mark, I've been using Tr[x] as an alternative to Apply[Plus, x] for long time. Though I can't conclusively explain why it's faster in your application, I'm pretty sure it's related to the handling of packed arrays though. Try this little experiment: lst = Table[Random[], {1000000}]; Tr[lst] // Timing Plus @@ lst // Timing lst = Developer`FromPackedArray[lst]; Tr[lst] // Timing Plus @@ lst // Timing After "unpacking" the data using Developer`FromPackedArray, Tr slows way down, but most interestingly, Plus@@ actually becomes FASTER when working on the "unpacked" data, to the point that evaluation time is equal to or less than for Tr[lst] on the same unpacked data. Paul >>>>>>>>>>>>>>>>>> Greetings, In the course of working on an optimization problem that involves summing large lists of real numbers, a colleague of mine came across an interesting result. We compared the computational speed of different methods for summing lists: (1) Apply[Plus, mylist] (2) Dot[mylist,ListofOnes], where ListofOnes is a list of of size N of 1.0's (3) Tr[mylist], where Tr is the built-in matrix trace operator. Based on our tests (where list sizes range from 100,000 to 1,000,000 elements), Method (3) is far and away the fastest. On average (3) is 5x faster than Method (2), and over 70x faster than Method (1). I was curious if anyone could offer an explanation. Thanks, -Mark