Re: Efficiency and ReplacePart?
- To: mathgroup at smc.vnet.net
- Subject: [mg85949] Re: [mg85896] Efficiency and ReplacePart?
- From: DrMajorBob <drmajorbob at bigfoot.com>
- Date: Thu, 28 Feb 2008 02:55:16 -0500 (EST)
- References: <6285672.1204145042313.JavaMail.root@m08>
- Reply-to: drmajorbob at longhorns.com
Two more options, one of which seems faster: n = 500000; ftemp = Table[{RandomReal[1, {2}], RandomReal[1, {2}]}, {n}]; First@Timing[one = ftemp /. {{a_, b_}, {c_, d_}} :> {{a, b}, {0, 0}}] First@Timing[two = Map[{#[[1]], {0, 0}} &, ftemp]] First@Timing[three = Map[ReplacePart[#, 2 -> {0, 0}] &, ftemp]] First@Timing[four = Map[MapAt[{0, 0} &, #, 2] &, ftemp]] First@Timing[five = (ftemp[[All, 2]] *= 0; ftemp)] one == two == three == four == five 0.943361 1.31027 3.20808 1.40886 0.536861 True Bobby On Wed, 27 Feb 2008 03:23:36 -0600, W. Craig Carter <ccarter at mit.edu> = wrote: > > If someone can answer the following question, I will have > learned something about efficiency in mathematica... > > I'd like each second part of a list to a zero-list: > > ftemp = Table[{RandomReal[1, {2}], RandomReal[1, {2}]}, {50000}]; > > Compare: > 1) > Timing[ftemp /. {{a_, b_}, {c_, d_}} :> {{a, b}, {0, 0}}][[1]] > > 2) > Timing[Map[(# = {#[[1]], {0, 0}} &), ftemp]][[1]] > > 3) Timing[Map[ReplacePart[#, 2 -> {0, 0}] &, ftemp]][[1]] > > (* > or if you like: > times[n_] := > Module[{ftemp = > Table[{RandomReal[1, {2}], RandomReal[1, {2}]}, {n}]}, > {Timing[ftemp /. {{a_, b_}, {c_, d_}} :> {{a, b}, {0, > 0}}][[1]], > Timing[Map[(# = {#[[1]], {0, 0}} &), ftemp]][[1]]}] > > ListPlot[Table[times[i], {i, 100, 10000, 100}]] > *) > > > 1 is faster than 2 is faster than 3. Why? > > Craig > > > -- = DrMajorBob at bigfoot.com