Re: Map vs. Table

• To: mathgroup at smc.vnet.net
• Subject: [mg75422] Re: Map vs. Table
• From: Szabolcs <szhorvat at gmail.com>
• Date: Sun, 29 Apr 2007 03:13:55 -0400 (EDT)
• Organization: University of Bergen
• References: <f0v6d5\$91v\$1@smc.vnet.net>

```Bill Rowe wrote:
> On 4/27/07 at 5:25 AM, replicatorzed at gmail.com (zac) wrote:
>
>> consider a set of data (y values):
>
>> data = Table[i*j, {i, 5}, {j, 10}]
>
> The same data can be generated more quickly with Outer. That is:
>
> In[15]:=
> Outer[Times,Range@5,Range@10]==Table[i*j,{i,5},{j,10}]
>

I would also have chosen Outer to generate data, but for some reason
this doesn't give a packed array.

In[5]:=
data=Outer[Times,Range@1000,Range@1000];

In[6]:=
PackedArrayQ@data

Out[6]=
False

>
> and
>
> In[16]:=
> Timing[Do[Table[i*j,{i,5},{j,10}],{10000}];]
>
> Out[16]=
> {0.947914 Second,Null}
>
> while
>
> In[17]:=
> Timing[Do[Outer[Times,Range@5,Range@10],{10000}];]
>
> Out[17]=
> {0.451616 Second,Null}
>

Yes, but it also depends on the size of the matrix.

In[10]:=
Timing[Do[Table[i j,{i,1000},{j,1000}],{20}];]

Out[10]=
{2.125 Second,Null}

In[11]:=
Timing[Do[Outer[Times,Range@1000,Range@1000],{20}];]

Out[11]=
{8.391 Second,Null}

I hope that these deficiencies of Outer and Inner (i.e that they don't
work with packed arrays) will be corrected in a future Mathematica.

As Jean-Marc's reply also demonstrates, it is not always easy to predict
the efficiency of different approaches. Are there any published
guidelines available on how to write efficient code in Mathematica?

Szabolcs

```

• Prev by Date: Re: Porting waveforms out of Mathematica and into a D/A converter
• Next by Date: Re: associate a parameter name with a string
• Previous by thread: Re: Map vs. Table