MathGroup Archive 2000

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

Search the Archive

Re: speed of evaluation

  • To: mathgroup at smc.vnet.net
  • Subject: [mg26198] Re: [mg26178] speed of evaluation
  • From: "Gareth J. Russell" <russell at cerc.columbia.edu>
  • Date: Thu, 30 Nov 2000 22:02:14 -0500 (EST)
  • Sender: owner-wri-mathgroup at wolfram.com

Dear Bernd,

First off, your code could be a lot simpler!

Your version:

In[35]:=
Timing[  Re[Plus @@
        Map[Map[#^2 &, #] &,
          N[Map[(Table[1, {popSize}]*#) &, Flatten[dataEnd]] -
              Map[f, dataEx]]]]]

Out[35]=
{0.133333 Second, {286.071, 103.065, 90.7069, 492.413, 2603.74, 774.867,
    215.515, 123.846}}

Short version:

In[36]:=
Timing[Apply[Plus, (dataEnd - Map[f, dataEx])^2]]

Out[36]=
{0.116667 Second, {286.071, 103.065, 90.7069, 492.413, 2603.74, 774.867,
    215.515, 123.846}}

This saves a LITTLE bit of time, but not much. It's the evaluation of your
function that is the limiting step. So, why not try a compiled version?

fc = Compile[{{x, _Real, 2}}, {x[[1]]^2 + x[[3]]^0.5, x[[1]], x[[2]],
      3 x[[3]]/(1 + x[[1]]), x[[3]] 5 x[[2]]^(x[[3]]/4),
    x[[1]] + x[[2]] + x[[3]], x[[3]] - x[[2]]*x[[2]], x[[1]]^2}]

In[40]:=
Timing[Apply[Plus, (dataEnd - Map[fc, dataEx])^2]]

Out[40]=
{0.0333333 Second, {286.071, 103.065, 90.7069, 492.413, 2603.74, 774.867,
    215.515, 123.846}}

This is a lot faster!

Gareth

bernd.ebersberger at wiso.uni-augsburg.de wrote:

> dear all,
> 
> i have a problem with the speed of mathematica 4.0
> 
> i have function f that is a list and it contains several (more than 200)
> functions as elements. a simple example is attached at  the end of the
> mail - the functions, i deal with are much more complex than the ones in the
> example here.
> 
> the functions depend on more than 40 variables althouhg it's only three in
> the example.
> 
> f[{x1_,x2_, ... x40_,x41_ ...}]
> 
> then i have a dataset containing about 600 datapoints for the {x1_,x2_, ...
> x40_,x41_ ...} variables (in the list dataEx in the example just randomly
> created) and i have a target value for each datapoint (in the list dataEnd
> in the example also randomly created in the example)
> 
> what i want to do is evaluate each function in the function-list f on each
> datapoint and compute the sum of the squared distances to the target values.
> 
> i do that with:
> 
> ****************************** example
> ********************************************
> 
> dataEx = Table[{Random[], Random[], Random[]}, {600}];
> dataEnd = Table[Random[], {600}];
> f[{x1_, x2_, x3_}] := {x1^2 + x3^0.5, x1, x2, 3 x3/(1 + x1), x3 5 x2^(x3/4),
> x1 + x2 + x3, x3 - x2*x2, x1^2}
> popSize = Length[f[{x1, x2, x3}]];
> res1 =
> Re[Plus @@
> Map[Map[#^2 &, #] &,
> N[Map[(Table[1, {popSize}]*#) &, Flatten[dataEnd]] -
> Map[f, dataEx]]]]
> 
> ****************************************************************************
> *******
> 
> the problem is that the evaluation of that number of functions (200
> functions) on 600 datapoints containing 40 and more variables takes quite a
> while. as i have to repeat that process for a couple of houndred times (f
> changes from run to run!!!) this ads up.
> 
> 
> does anybody have a suggestion how to speed up the process?

 
==================================================
Dr. Gareth J. Russell

NEW ADDRESS and E-MAIL FROM 1ST SEPTEMBER, 1999

Center for Environmental Research and Conservation
  MC 5556
    Columbia University
      1200 Amsterdam Avenue
        New York, NY 10027, U.S.A.

 Phone: ++1 212 854 5094
   Fax: ++1 212 854 8188
E-mail: russell at cerc.columbia.edu
   WWW: http://web.utk.edu/~grussell   (NO CHANGE)

OLD ADDRESS (AND STILL MY EMPLOYERS)

Department of Ecology and Evolutionary Biology
  University of Tennessee
    569 Dabney Hall
      Knoxville, TN 37996-1610, USA
==================================================




  • Prev by Date: Re: Re: polynomial congruence
  • Next by Date: Re: speed of evaluation
  • Previous by thread: Re: speed of evaluation
  • Next by thread: solve f(x)=0, where f:Rn+1 -> Rn