Re: Product

*To*: mathgroup at smc.vnet.net*Subject*: [mg87592] Re: Product*From*: Szabolcs Horvát <szhorvat at gmail.com>*Date*: Mon, 14 Apr 2008 05:41:36 -0400 (EDT)*Organization*: University of Bergen*References*: <200804110542.BAA04653@smc.vnet.net> <200804121059.GAA00044@smc.vnet.net> <ftsd2p$bca$1@smc.vnet.net>

Andrzej Kozlowski wrote: > The reason for the speed of Total unlike Plus is that it does not need > to unpack packed arrays. Here is how you can see what happens. > > SetSystemOptions["PackedArrayOptions" -> {"UnpackMessage" -> True}]; > > mytestlist = Table[RandomInteger[{1, 9}], {1000000}]; > Developer`PackedArrayQ[mytestlist] > True > > So mytestlist is a packed array. Now let's see what happens if we add > it up using Plus: > > In[4]:= Plus @@ mytestlist > During evaluation of In[4]:= Developer`FromPackedArray::"unpack1" : > "Unpacking array." > During evaluation of In[4]:= Developer`FromPackedArray::"punpack1" : > "Unpacking array to > Out[4]= 4998322 > > Now the same with Total: > > In[5]:= Total[mytestlist] > Out[5]= 4998322 > > It is the unpacking of packed arrays by Plus that makes adding up this > list using Plus much slower. But of course in principle there is nothing that would make it impossible to introduce a special case for functions like Times and Plus, and make them work with packed arrays. So this alone does not make it necessary to introduce a new syntax/new function, like Total[]. For example, Unprotect[Apply] Apply[Plus, arr_?Developer`PackedArrayQ] := Total[arr] Protect[Apply] (Of course this is just an example to show that it is possible to do this. It is not a complete implementation and certainly not something that I would recommend for _users_ to do. But it would be nice if WRI provided these special case algorithms unless there is some limitation in Mathematica's internal design that makes it difficult/impossible to do this in a proper way.)

**Follow-Ups**:**Re: Re: Product***From:*Andrzej Kozlowski <akoz@mimuw.edu.pl>

**References**:**Product***From:*"Steven" <steven_504@telenet.be>

**RE: Product***From:*"Jose Luis Gomez" <jose.luis.gomez@itesm.mx>