Re: Replace

• To: mathgroup at smc.vnet.net
• Subject: [mg121117] Re: Replace
• From: Armand Tamzarian <mike.honeychurch at gmail.com>
• Date: Mon, 29 Aug 2011 03:47:51 -0400 (EDT)
• Delivered-to: l-mathgroup@mail-archive0.wolfram.com
• References: <j35am1\$og8\$1@smc.vnet.net> <j37p96\$4lk\$1@smc.vnet.net>

```On Aug 28, 6:09 pm, Peter Pein <pet... at dordos.net> wrote:
> Am 27.08.2011 14:22, schrieb Armand Tamzarian:
> ...
>
> > Doh! you wanted "|" not "/"
>
> > It still looks like using Part will give the fastest solution (on my
> > system at least, 8.0.1 OS X 10.6.8)
>
> > tmp = RandomInteger[{1, 20}, {20000, 2}];
>
> > Timing[tmp /. {x_, y_} :> x | y;]
>
> > Timing[Alternatives @@@ tmp;]
>
> > Timing[Thread[tmp[[All, 1]] | tmp[[All, 2]]];]
>
> > Mike
>
> Transpose seems to be even a bit faster than Part:
>
> In[1]:= tmp = RandomInteger[{1, 20}, {2000000, 2}];
> {t, r} = Transpose[{
>            Timing[tmp /. {x_, y_} :> x | y],
>            Timing[Apply[Alternatives, tmp, {1}]],
>         ];
> t
> SameQ @@ r
>
> Out[3]= {1.56,0.764,0.624,0.531}
> Out[4]= True

After I posted my solution I realized that the timing would most
likely differ if the list contained mixed types, i.e. not packed.

Apply becomes the fastest method in that case (incl. Peter's
solution):

tmp = RandomInteger[{1, 20}, {200000, 2}];
tmp[[1, 1]] = 1.0;
{t, r} = Transpose[{Timing[tmp /. {x_, y_} :> x | y],
Timing[Apply[Alternatives, tmp, {1}]],