Re: Vectorization
- To: mathgroup at smc.vnet.net
- Subject: [mg60653] Re: Vectorization
- From: Maxim <ab_def at prontomail.com>
- Date: Fri, 23 Sep 2005 04:19:58 -0400 (EDT)
- References: <dgtjh4$2bk$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
On Thu, 22 Sep 2005 06:38:28 +0000 (UTC), Marcelo Mayall
<mmayall at bol.com.br> wrote:
> It's possible to initialize a vector starting from an elementary
> functions:
>
> In[1]:=
> Table[Sin[Random[]],{10000000}]//Timing//First
>
> Out[1]=
> 3.203 Second
>
> The same problem can be done a bit more efficiently if the elementary
> function is applied to the numerical vector:
>
> In[2]:=
> Sin[Table[Random[],{10000000}]]//Timing//First
>
> Out[2]=
> 1.969 Second
>
> But why the tendency is opposed when the numbers are complex ? Is this a
> bug ?
>
> In[3]:=
> Table[Sin[I Random[]],{1000000}]//Timing//First
> Sin[Table[I Random[],{1000000}]]//Timing//First
>
> Out[3]=
> 2.484 Second
>
> Out[4]=
> 2.656 Second
>
>
> Thanks,
>
> Marcelo Mayall
>
There was a discussion of a similar problem in sci.math.symbolic recently:
Table[1.*I*Random[], {10^6}] doesn't generate a packed array, and neither
does Table[Complex[0., 1.]*Random[], {10^6}]. You need to use Table[(0.
+ 1.*I)*Random[], {10^6}] or Table[N[I]*Random[], {10^6}] instead, which
is not very obvious, as Complex[0., 1.], (0. + 1.*I) and N[I] evaluate to
the same thing.
What's more, Table[N[Complex[0, 1]]*Random[], {10^6}] doesn't produce a
packed array either. Apparently some symbolic preprocessing is taking
place, and the preprocessor is very picky.
Maxim Rytin
m.r at inbox.ru