       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:=
Unprotect[Mean];
Mean[l_List] := (Plus @@ l)/Length[l];
Protect[Mean];
In:=
data = Table[Random[Real, {-100, 100}], {1036}, {300}, {21}];
In:=
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=
1.531 Second
Out=
{1036, 20}
In:=
f = Compile[{{d, _Real, 2}},
Join[d[[1, {1, 2}]], ((Plus @@ #1)/Length[#1] &)
[d[[All, Range[4, 21]]]]]];
In:=
First[{t2, data02} = Timing[f /@ data]]
Union@Flatten@Chop[data02 - data02original]
Out=
0.547 Second
Out=
{0}
In:=
t1/t2
Out=
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