Re: Map and functional constructs to replace iterative statements
- To: mathgroup at smc.vnet.net
- Subject: [mg96933] Re: Map and functional constructs to replace iterative statements
- From: mike.honeychurch at gmail.com
- Date: Fri, 27 Feb 2009 06:15:52 -0500 (EST)
- References: <go31ba$f47$1@smc.vnet.net>
On Feb 25, 3:00 am, Andreas <aa... at ix.netcom.com> wrote: > I have begun to replace Table, Do, While, or For, but in my thinking with= Map, Inner, Outer and other functional programming constructs as I learn m= ore about Mathematica. > > But, I'm stuck. I need to figure out how to use Map (or some related a= pproach) when a function needs both a current value and a previous value in= a time series, such as a percentage change function (or perhaps more gener= ally stated, when I need to refer to previous values in a series or even pr= evious calculations). But first a simple case: > > percentChange[currentValue_, previousValue_] := 100 * ( currentValue - = previousValue) / previousValue > > I know how to apply this iteratively, but how can I do it with Map or som= e other functional construct? > > Say I have a list: timeSeries > > I thought to try something like this: > > Map[percentChange[?,?], timeSeries] > > but I don't know how what to put in for "?". > > Any help much appreciated. > > Thx. Daniel's solution is probably the best in terms of simplicity but this seems to be slightly faster: 100*Differences[d]/Most[d] I had initially thought of ListCorrelate which also gives a fast reply with large data sets: 100*ListCorrelate[{-1, 1}, d]/Most[d]; Trying to get it all to happen within a single function only slowed things down: gg[x_, y_] := y/x - 1 100*ListCorrelate[{1, 1}, ls, {1, -1}, 0, Times, gg] (far too much happening to slow things down) Mike