MathGroup Archive 2011

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

Search the Archive

Re: unexpected Timing results

  • To: mathgroup at
  • Subject: [mg115839] Re: unexpected Timing results
  • From: Arnoud Buzing <arnoudb at>
  • Date: Sat, 22 Jan 2011 03:22:48 -0500 (EST)

On 1/21/11 3:35 AM, gleam at wrote:
> I experienced a couple of rather unexpected timing results today that
> I am hoping can be explained to me.
>    In Mathematica 7.0.1:
> ragged = RandomInteger[1*^6, #]&~Array~1000;
> Do[PadLeft[ragged], {50}] // Timing
> Do[PadLeft[ragged, {1000, 1000}], {50}] // Timing
> Do[PadLeft[#, 1000]&  /@ ragged, {50}] // Timing
> {4.422, Null}
> {4.406, Null}
> {0.344, Null}
> This difference I did not anticipate.  I suppose this has something
> to do with packed arrays, but I do not understand why the upper two
> forms do not handle the task at least as well as the third one.

Before running your experiment, you can evaluate:


to see when expressions are being unpacked.

The 'ragged' expression is a list of packed arrays, but the whole 
'ragged' expression is not packed:

In[16]:= Union[Developer`PackedArrayQ /@ ragged]

Out[16]= {True}

In[17]:= Developer`PackedArrayQ[ragged]

Out[17]= False

(The reason for this is that ragged arrays can not be packed).

So the 'ragged' expression is like: { <packed_array>, <packed_array>, ... }

The first two Do[] loops are therefore unpacking the whole expression, 
to run the normal (non-packed, slow) evaluation.

The last Do[] loop maps over individual packed arrays, and evaluates 
with the packed evaluation code.

  • Prev by Date: Re: Mathematica v8: import a space-delimited table of numbers?
  • Next by Date: Re: Simple n-tuple problem - with no simple solution
  • Previous by thread: unexpected Timing results
  • Next by thread: Re: unexpected Timing results