MathGroup Archive 2005

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

Search the Archive

Re: For to Map to Increase Speed

  • To: mathgroup at smc.vnet.net
  • Subject: [mg53248] Re: For to Map to Increase Speed
  • From: Peter Pein <petsie at arcor.de>
  • Date: Mon, 3 Jan 2005 04:29:24 -0500 (EST)
  • References: <cr8e90$r7k$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Benedetto Bongiorno wrote:

> To MathGroup,
> 
> Is there a Map routine that can shorten the computation time of data to
> data02?
> 
> The variable data is a list of 1036 lists within which are lists of
> sublists of 1 or more, usually more.
> 
> I cannot flatten data because I need to keep the groupings (1036)  that was
> created by Split.
> 
> Dimensions[data]
> 
> {1036}
> 
> data02={};
> 
> n=Length[data]+1;
> 
> For[i=1,i<n,i++,step1=Mean[ColumnTake[data[[i]],{4,21}]];
> 
> AppendTo[data02,Join[data[[i,1,{1,2}]],step1]]]
> 
> Dimensions[data02]
> 
> {1036,20}
> 
>  
> 
> Thank You
> 
> 
I don't know why, but my Mean[] seems to be broken?!? So I had to define 
it again.

In[1]:=
Unprotect[Mean];
Mean[l_List] := (Plus @@ l)/Length[l];
Protect[Mean];
In[4]:=
data = Table[Random[Real, {-100, 100}], {1036}, {300}, {21}];
In[5]:=
t1 = First@Timing[
   data02original = {};
   n = Length[data] + 1;
   For[i = 1, i < n, i++, step1 = Mean[ColumnTake[data[[i]], {4, 21}]];
     AppendTo[data02original, Join[data[[i, 1, {1, 2}]], step1]];]]
Dimensions@data02original
Out[5]=
   1.531 Second
Out[6]=
   {1036, 20}
In[7]:=
f = Compile[{{d, _Real, 2}},
   Join[d[[1, {1, 2}]], ((Plus @@ #1)/Length[#1] &)
     [d[[All, Range[4, 21]]]]]];
In[8]:=
First[{t2, data02} = Timing[f /@ data]]
Union@Flatten@Chop[data02 - data02original]
Out[8]=
   0.547 Second
Out[9]=
   {0}
In[10]:=
t1/t2
Out[10]=
   2.7989

-- 
Peter Pein
Berlin


  • Prev by Date: Re: Thread
  • Next by Date: Re: Partial evaulation of function terms
  • Previous by thread: Re: For to Map to Increase Speed
  • Next by thread: Re: For to Map to Increase Speed