Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2012

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

Search the Archive

Re: Replace, ReplaceAll and If time performace comparition

  • To: mathgroup at smc.vnet.net
  • Subject: [mg127289] Re: Replace, ReplaceAll and If time performace comparition
  • From: Dana DeLouis <dana01 at me.com>
  • Date: Sat, 14 Jul 2012 01:29:48 -0400 (EDT)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • Delivered-to: mathgroup-newout@smc.vnet.net
  • Delivered-to: mathgroup-newsend@smc.vnet.net

> (If[# < 0, 0, #] & /@ randomList); // AbsoluteTiming
> {0.572200, Null}
> ...  There is some trick to make it faster?


Hi.   You've got a great solution with Clip, but just to add 2 cents..

In other programming languages, sometimes using Max or Min instead of an IF statement is nice.

randomList=RandomInteger[{-100,100},10 10^6];

t1=(If[#<0,0,#]&/@randomList);//AbsoluteTiming
{0.729998,Null}

t2=(Max[#,0]&/@randomList);//AbsoluteTiming
{0.454711,Null} 

t1==t2
True


In the old days before Clip, one way was to use two IF statements.
One neat technique was to replace the two IF statements with Median.

v=RandomInteger[{-100,100},20];

// New
Clip[v,{0,1}]
{0,0,1,1,1,1,0,1,0,1,0,1,0,0,1,1,1,0,0,0}

// Old days 
Median[{0,#,1}]& /@v
{0,0,1,1,1,1,0,1,0,1,0,1,0,0,1,1,1,0,0,0}

%%==%
True

If one were stuck without access to a Median function, then one way without IF statements...

Min[Max[0,#],1]& /@ v
{0,0,1,1,1,1,0,1,0,1,0,1,0,0,1,1,1,0,0,0}

= = = = = = = = = =
Dana DeLouis
Mac & Math 8
= = = = = = = = = =



On Jun 24, 4:24 am, Murta <rodrigomur... at gmail.com> 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?
> 
> tks
> Murta





  • Prev by Date: Re: Algorithm Analysis Course: Should I use Mathematica for projects? //oops, typos
  • Next by Date: Re: Embedded HTML CDF rendered as grey box.
  • Previous by thread: Re: Replace, ReplaceAll and If time performace comparition
  • Next by thread: Is there a way to stop the vertex labels from over-lapping?