Re: Replace, ReplaceAll and If time performace comparition
- To: mathgroup at smc.vnet.net
- Subject: [mg127027] Re: Replace, ReplaceAll and If time performace comparition
- From: Bill Rowe <readnews at sbcglobal.net>
- Date: Mon, 25 Jun 2012 04:01:42 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
On 6/24/12 at 4:26 AM, rodrigomurtax at gmail.com (Murta) wrote:
>HI all I was working in some simulations with random numbers and get
>this example of performance comparition.
>randomList = RandomInteger[{-100, 100}, 10 10^6];
>(randomList /. (x_ /; x < 0 -> 0)); // AbsoluteTiming {5.747133,
>Null}
>Replace[randomList, (x_ /; x < 0 -> 0), 1]; // AbsoluteTiming
>{4.758984, Null}
>(If[# < 0, 0, #] & /@ randomList); // AbsoluteTiming {0.572200,
>Null}
>I personally prefer work with patterns because they are more compact
>and functional. Someone knows why patter is one magnitude order
>slow?? There is some trick to make it faster?
I don't know how to make the pattern matching faster. But I do
know how to create the list faster. That is:
In[1]:= randomList = RandomInteger[{-100, 100}, 10 10^6];
In[2]:= (a = If[# < 0, 0, #] & /@ randomList); // AbsoluteTiming
Out[2]= {0.597679,Null}
In[3]:= (b = Clip[randomList, {0, 100}]); // AbsoluteTiming
Out[3]= {0.086329,Null}
In[4]:= a == b
Out[4]= True
And it seems to me the syntax of Clip makes it very apparent
what the code does.