2008/6/18 bevan <[EMAIL PROTECTED]>: > Hello, > > I am looking for some pointers that will hopefully get me a round an issue I > have hit. > > I have a timeseries of river flow and would like to carry out some analysis on > the recession periods. That is anytime the values are decreasing. I would > like to restrict (mask) my data to any values that are in a continuous > sequence > of 3 or more (in the example below), that are decreasing in value. > > Hopefully this example helps: > > import numpy as np > > Flow = np.array([15.4,20.5,19.4,18.7,18.6,35.5,34.8,25.1,26.7]) > FlowDiff = np.diff(Flow) > boolFlowdiff = FlowDiff>0 > MaskFlow = np.ma.masked_array(Flow[1:],boolFlowdiff) > > print MaskFlow > [-- 19.4 18.7 18.6 -- 34.8 25.1 --] > > The output I would like is > [-- 19.4 18.7 18.6 -- -- -- --] > Where the second groups is blanked because the sequence only has 2 members.
I would tackle this in steps: find the decreasing pairs, then find places where two of them occur in a row, then construct your mask. Finding decreases: d = diff(X)<0 finding two decreases in a row: t = d[1:] & d[:-1] creating the right mask: m = np.zeros(n,dtype=np.bool) m[:n-2] |= t m[1:n-1] |= t m[2:n] |= t For finding longer runs you would want other tricks. Anne _______________________________________________ Numpy-discussion mailing list Numpy-discussion@scipy.org http://projects.scipy.org/mailman/listinfo/numpy-discussion