Re: Re: Re: "Accumulate" in Mathematica 6
- To: mathgroup at smc.vnet.net
- Subject: [mg82973] Re: [mg82949] Re: [mg82837] Re: "Accumulate" in Mathematica 6
- From: DrMajorBob <drmajorbob at bigfoot.com>
- Date: Mon, 5 Nov 2007 05:05:09 -0500 (EST)
- References: <200710301049.FAA20459@smc.vnet.net> <fg9o2k$lv7$1@smc.vnet.net> <200711011009.FAA07420@smc.vnet.net> <30842530.1194217543780.JavaMail.root@m35>
- Reply-to: drmajorbob at bigfoot.com
Simpler (and marginally faster) is
With[{m = 500, n = 20},
ListPlot[
Transpose@
Accumulate@RandomReal[NormalDistribution[0, Sqrt[1/m]], {m, n}],
DataRange -> {1/m, 1}, Joined -> True]] // Timing
Bobby
On Sun, 04 Nov 2007 05:12:42 -0600, Andrzej Kozlowski <akoz at mimuw.edu.pl>
wrote:
> It is in the nature of things that specialized tools can be better
> optimized than more general ones. In particular, this is true of
> computer programs.
>
> As for usefulness: I will give just one example. This graphic
> represents one of the most important objects in mathematics.
>
> With[{m = 500, n = 20},
> ListPlot[
> Accumulate /@
> Map[Prepend[#, 0] &,
> RandomReal[NormalDistribution[0, N[Sqrt[1/m]]], {n, m}]], Joined
> -> True,
> DataRange -> {0, 1}]]
>
> I think the speed of generating this alone justifies the existence of
> Accumulate.
>
> Andrzej Kozlowski
>
>
>
> On 1 Nov 2007, at 19:09, Oskar Itzinger wrote:
>
>> Taken - so it's speed. Does that imply we can expect in the future
>> a whole
>> bunch of
>>
>> speed-optimized functions for doing a similar thing for, say,
>> Times, Divide,
>> or
>>
>> any other function one can dream of?
>>
>> BTW, your mileage may vary - but in my code I've certainly much more
>> occasions to
>>
>> use Fold/FoldList with other functions than Plus [as per the new
>> Accumulate]. So,
>>
>> since Fold/FoldList plays a reasonably important role in functional
>> programming,
>>
>> wouldn't speeding *them* up be more useful in general than
>> providing just
>> individually
>>
>> optimized functions?
>>
>> Thanks.
>>
>> /oskar
>>
>> "Andrzej Kozlowski" <akoz at mimuw.edu.pl> wrote in message
>> news:fg9o2k$lv7$1 at smc.vnet.net...
>>> On 30 Oct 2007, at 19:49, Oskar Itzinger wrote:
>>>
>>>> Very sadly, Mathematica 6 is not supported under Irix - so I can't
>>>> play with
>>>> it practically - but I noticed in the online
>>>>
>>>> documentation that there is a new function "Accumulate[list]",
>>>> defined to be
>>>> equivalent to "Rest[FoldList[Plus, 0, list]]",
>>>>
>>>> giving a list of the successive accumulated totals of the
>>>> elements in
>>>> <list>.
>>>>
>>>> Funny. While it was considered obsolete and superseded by
>>>> "FoldList" in
>>>> Mathematica 2, Mathematica 1 (!) already did
>>>>
>>>> have a function "Accumulate", defined as
>>>>
>>>> Accumulate[f, g[e1, e2, e3, ...]] <==> g[e1, f[e1, e2], f[f[e1,
>>>> e2], e3],
>>>> ...]
>>>>
>>>> so that
>>>>
>>>> Accumulate[Plus, Range[5]] <==> {1, 3, 6, 10, 15}
>>>>
>>>> However, "Accumulate" in Mathematica 1 clearly was not restricted
>>>> to "Plus"
>>>> but rather specifically intended for dealing
>>>>
>>>> with functions that take exactly two arguments - so, I believe that
>>>> "Accumulate" in Mathematica 6 is much less usable
>>>>
>>>> than the former in Mathematica 1.
>>>>
>>>> Maybe I'm missing something here - but what was the rationale behind
>>>> re-implementing "Accumulate" in such a restricted
>>>>
>>>> version now?
>>>>
>>>> Thanks.
>>>>
>>>> /oskar
>>>>
>>>>
>>>>
>>>>
>>>
>>> You are missing just one thing - performance. Accumulate in this
>>> restricted sense is incredibly fast - and extremly useful.
>>>
>>> Andrzej Kozlowski
>>>
>>
>>
>>
>
>
>
--
DrMajorBob at bigfoot.com
- References:
- Re: "Accumulate" in Mathematica 6
- From: "Oskar Itzinger" <oskar@opec.org>
- Re: "Accumulate" in Mathematica 6