Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2006
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2006

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

Search the Archive

Re: For Routine to Map Routine

  • To: mathgroup at smc.vnet.net
  • Subject: [mg70441] Re: For Routine to Map Routine
  • From: Benedetto Bongiorno <bbongiorno at attglobal.net>
  • Date: Mon, 16 Oct 2006 02:35:44 -0400 (EDT)
  • References: <egse9i$css$1@smc.vnet.net> <4532622A.8010704@gmail.com>

Jean-Marc

Thank you for your prompt response.
You solution works beautifully.

Regards,

Ben

Jean-Marc Gulliet wrote:
> Benedetto Bongiorno wrote:
>> To All,
>>
>> Dimensions of ans01 is 2185850 by 5.
>> I am looking to convert my For routine to the more efficient Map routine
>>  
>> n=Length[ans01]
>> fo={};
>>
>> For[i=1, i<n, i++,
>> If[ans01[[i,1]] == ans01[[i+1,1]],
>> AppendTo[fo, ans01[[1]]]];
>>
>> I tried
>> Map[If[#[[1]] == #[[1]],#]&,ans01];
>>
>> But it does not work.
>>
>> Thank you
>>
>> Ben
>>
>>
> Hi Ben,
>
> The following function is linear in time and is roughly 40 times 
> faster than your procedure when processing a list of 100,000 elements. 
> 2185850 elements of 5 integers are processed in less than 40 seconds 
> on my system.
>
> In[1]:=
> myConvert[data_?MatrixQ]:=
>   Module[{sp},
>     sp=Split[data, #1[[1]]\[Equal]#2[[1]]&];
>     Flatten[Most/@Extract[sp, Position[Length/@sp, x_/;x>1]],1]
>     ]
>
> In[2]:=
> ans01=Table[Random[Integer,{0,5}],{2185850},{5}];
>
> In[3]:=
> Timing[myConvert[ans01];][[1]]
>
> Out[3]=
> 37.032 Second
>
> In[4]:=
> ans01=Table[Random[Integer,{0,5}],{100000},{5}];
>
> In[5]:=
> t1=Timing[n=Length[ans01];
> fo={};
>       For[i=1,i<n,i++,If[ans01[[i,1]]\[Equal]
>       ans01[[i+1,1]],AppendTo[fo,ans01[[i]]]];]][[1]]
>
> Out[5]=
> 65.922 Second
>
> In[6]:=
> t2=Timing[fo2=myConvert[ans01];][[1]]
>
> Out[6]=
> 1.703 Second
>
> In[7]:=
> fo\[Equal]fo2
>
> Out[7]=
> True
>
> In[8]:=
> t1/t2
>
> Out[8]=
> 38.7093
>
> Regards,
> Jean-Marc
>
>


  • Prev by Date: Re: For Routine to Map Routine
  • Next by Date: Fwd: Beginner--[Plz Help] I don't want to display a POLARPLOT but use SHOW Command
  • Previous by thread: Re: For Routine to Map Routine
  • Next by thread: RE: For Routine to Map Routine