MathGroup Archive 2008

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Performance of Array Addition

  • To: mathgroup at smc.vnet.net
  • Subject: [mg90979] Re: Performance of Array Addition
  • From: Albert Retey <awnl at gmx-topmail.de>
  • Date: Fri, 1 Aug 2008 03:01:43 -0400 (EDT)
  • References: <g6rnv9$7lj$1@smc.vnet.net>

Hi Jeremy,

> Let there be, for example, an array of reals with dimensions
> {d1,d2,3}.
> 
> I have noticed that the command
> 
> array[[All,All,1]] + array[[All,All,2]] + array[[All,All,3]];
> 
> is much faster than
> 
> Map[Total, array, {2}];
> 
> even though they return the same answer.
> 
> The advantage of Map[Total, array, {2}] is that it allows arrays of
> dimension {d1,d2,d3}, with d3 arbitrary.
> 
> Is there a way to get closer to the speed advantages of hand-coding
> the addition of the final dimension, while
> allowing the number of elements in the final dimension to be
> arbitrary?

yes

This is my first try, it just literally does programmatically what you
have done for 3:

Plus@@Table[array[[All, All, i]], {i, 1, Last[Dimensions[array]]}]

But if you look at the documentation for Total you will find that it
accepts additional arguments:

Total[array, {3}]

or:

Total[array,{Total[array, {Depth[array] - 1}]}]

which is even faster by a factor of about 3 on my machine...

hth,

albert


  • Prev by Date: Re: Constructing vector using table
  • Next by Date: Re: Constructing vector using table
  • Previous by thread: Re: Performance of Array Addition
  • Next by thread: Re: Performance of Array Addition