Mathematica 9 is now available
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: [mg127025] Re: Replace, ReplaceAll and If time performace comparition
  • From: Andrzej Kozlowski <akozlowski at gmail.com>
  • Date: Mon, 25 Jun 2012 04:01:00 -0400 (EDT)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • References: <201206240826.EAA08423@smc.vnet.net>

On 24 Jun 2012, at 10:26, 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?
>
> tks
> Murta
>

Purpose built-in functions will always be much faster than general methods (such as pattern matching). However, in this particular your fastest method is actually far from optional:

In[1]:= randomList=RandomInteger[{-100,100},10 10^6];
In[2]:= (a=If[#<0,0,#]&/@randomList);//AbsoluteTiming
Out[2]= {0.874206,Null}
In[3]:= (b=Clip[randomList,{0,Infinity},{0,1}]);//AbsoluteTiming
Out[3]= {0.064867,Null}
In[4]:= a==b
Out[4]= True

There is no way to speed up pattern matching to give comparable performance.

Andrzej Kozlowski




  • Prev by Date: Re: Replace, ReplaceAll and If time performace comparition
  • Next by Date: Re: Default path for opening files
  • Previous by thread: Re: Replace, ReplaceAll and If time performace comparition
  • Next by thread: Re: Replace, ReplaceAll and If time performace comparition