Mathematica 9 is now available
Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2008

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: ConstantArray and List

  • To: mathgroup at smc.vnet.net
  • Subject: [mg88168] Re: ConstantArray and List
  • From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
  • Date: Sun, 27 Apr 2008 04:57:22 -0400 (EDT)
  • Organization: The Open University, Milton Keynes, UK
  • References: <fuumjj$8i2$1@smc.vnet.net>

� wrote:

> Consider the following inputs:
> 
> In[1]:= ConstantArray[f[], {5}]
> 
> Out[1]= {f[], f[], f[], f[], f[]}
> 
> In[2]:= ConstantArray[List[], {5}]
> 
> During evaluation of In[2]:= ConstantArray::scalar: Argument {} at \
> position 1 is not a scalar. >>
> 
> Out[2]= ConstantArray[{}, {5}]
> 
> 
> Why doesn't the second one work?  Is this because of the way packed 
> arrays are handled (just a guess)?

Packed array occurs, if I remember correctly, when the array has more 
than 250 or more elements.

> What is the advantage of ConstantArray over Table or Array?  It doesn't 
> seem to be much faster, and it doesn't seem to return an array stored in 
> a more efficient way (I experimented a little with MemoryInUse[]).

The difference is the building speed of an array for ConstantArray 
evaluates only once the expression that is going to be present in every 
entry while Array evaluates the expression for each elements. In the 
examples below, we can see that building an array of symbols is five 
times faster, an array of constant integers is up to 30 times faster.

In[22]:= ConstantArray[f[], {5000, 5000}] // Timing // First

Out[22]= 2.10453

In[23]:= Array[f[], {5000, 5000}] // Timing // First

Out[23]= 9.36111

In[24]:= %/%%

Out[24]= 4.44809

In[25]:= ConstantArray[1, {5000, 5000}] // Timing // First

Out[25]= 0.140288

In[26]:= Array[1, {5000, 5000}] // Timing // First

Out[26]= 4.07251

In[27]:= %/%%

Out[27]= 29.0296

In[28]:= ConstantArray[1., {5000, 5000}] // Timing // First

Out[28]= 0.253713

In[29]:= Array[1., {5000, 5000}] // Timing // First

Out[29]= 4.04874

In[30]:= %/%%

Out[30]= 15.9579

Best regards,
-- Jean-Marc


  • Prev by Date: Re: ConstantArray and List
  • Next by Date: Re: 2*m^z - m^z = ?
  • Previous by thread: Re: ConstantArray and List
  • Next by thread: Problems with NSolve