Re: Create a cumulative list
- To: mathgroup at smc.vnet.net
- Subject: [mg93386] Re: Create a cumulative list
- From: Bill Rowe <readnews at sbcglobal.net>
- Date: Wed, 5 Nov 2008 04:57:03 -0500 (EST)
On 11/4/08 at 6:19 AM, cadieux_jp at hotmail.com (philipp) wrote: >So here is my problem. I have a list of values let's say ValueList = >{1,2,3,4,5,6,7,8,9} What I want is Compilation = >{1,3,6,10,15,21,28,36,45} created in adding Compilation[[1]] with >ValueList[[2]] to create Compilation[[2]]. In the same way, >Compilation[[7]] = Compilation[[6]] + ValueList[[7]]. In version 6 of Mathematica this is easily accomplished using Accumulate. That is In[22]:= Accumulate@{1, 2, 3, 4, 5, 6, 7, 8, 9} Out[22]= {1,3,6,10,15,21,28,36,45} In earlier versions of Mathematica, the same result can be obtained using FoldList, i.e, In[23]:= Rest@FoldList[Plus, 0, {1, 2, 3, 4, 5, 6, 7, 8, 9}] Out[23]= {1,3,6,10,15,21,28,36,45} >If that wasn't enough, I need to add a difficulty to that. If, at >any time, a value of Compilation[[i]] is bigger that XYZ, then that >Compilation[[i]] should be equal to 0. This can be done using Clip. For example to set all of the values greater than 6 to zero in the last result do: In[24]:= Clip[%, {0, 6}, {0, 0}] Out[24]= {1,3,6,0,0,0,0,0,0} Or I could zero all the values less than 6 and greater than 20 by doing: In[25]:= Clip[%%, {6, 20}, {0, 0}] Out[25]= {0,0,6,10,15,0,0,0,0} >To help you understand (sorry but English is not my first language >and explaining it in my first language is already tough), here is >the results I am looking for. >My ValueList = {0.0032833, -0.000654511, -0.0065494, 0.00103598, >-0.00112899, 0.00386173, 0.00365922, 0.00551557, -0.0138527, >0.00471387, 0.00497326, -0.00140056, -0.00187003, -0.0195785, >-0.00210204, -0.00900038, 0.000289855, 0.000289771, -0.00135187, >0.00386772} >My Compilation = {0, -0.000654511, 0, 0.00103598, >-0.0000930101, 0, 0, 0, 0, 0, 0, -0.00140056, 0, 0, 0, 0, >0.000289855, 0.000579626, -0.000772247, 0} and the additionnal >criteria is >0.002 and <-0.002 (or >0.002 in absolute value) Hmm... I don't understand what you are doing here. If I first use Accumulate to get the cumulative sums then apply Clip to zero the values outside the range {-0.002, 0.002} I get In[32]:= Clip[Accumulate[ValueList], {-0.002, 0.002}, {0, 0}] Out[32]= {0,0,0,0,0,-0.000151891,0,0,0,-0.000115931,0,0,0.00158674,0,0,0,= 0,0,0,0} which is clearly different from what you indicate should result.