Re: Why does Through unpack?

• To: mathgroup at smc.vnet.net
• Subject: [mg125609] Re: Why does Through unpack?
• From: DrMajorBob <btreat1 at austin.rr.com>
• Date: Wed, 21 Mar 2012 05:47:13 -0500 (EST)
• Delivered-to: l-mathgroup@mail-archive0.wolfram.com
• References: <201203200720.CAA11907@smc.vnet.net>

```Your Through syntax is not right for what you seem to want, since operator
precedence makes it equivalent to

Through /@ ({Min, Max} /@ Transpose[dat])

But this is OK:

On["Packing"]
dat = RandomInteger[1*^7, {5000000, 2}];
{Min@#, Max@#} & /@ Transpose@dat // AbsoluteTiming // Quiet

{0.158896, {{4, 9999996}, {1, 10000000}}}

Min /@ Transpose@dat // AbsoluteTiming // Quiet

{0.118989, {4, 1}}

Max /@ Transpose@dat // AbsoluteTiming // Quiet

{0.119237, {9999996, 10000000}}

Through /@ {Min, Max} /@ Transpose[dat] // AbsoluteTiming

{1.575901, {{4, 9999996}, {1, 10000000}}}

(Correct result, but slow.)

Bobby

On Tue, 20 Mar 2012 02:20:32 -0500, Szabolcs <szhorvat at gmail.com> wrote:

> Consider the following example:
>
> On["Packing"]
>
> dat = RandomInteger[1*^7, {5000000, 2}];
>
> Max /@ Transpose[dat]; // AsboluteTiming
>
> Note that the array is only unpacked to level 1, so Max is fast.
>
> Now let's get both the Min and the Max:
>
> Through /@ {Min, Max} /@ Transpose[dat]; // AbsoluteTiming
>
> Now the full array is unpacked, significantly hurting performance.
>
> Question:
>
> Why is it necessary to unpack the array when using Through?  Here it
> doesn't seem to be.  Is it a design decision that Through unpacks, or is
> it an over sight?  Through does not touch the function argument (it only
> affects the head), I don't see why it would need to unpack it.
>

--
DrMajorBob at yahoo.com

```

• Prev by Date: Re: Problems reading text files with embedded delimiters
• Next by Date: Roman Maeder and Computer Science with Mathematica
• Previous by thread: Why does Through unpack?