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}]
>
Just a note about this:
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