Re: ListInterpolate and missing values
- To: mathgroup at smc.vnet.net
- Subject: [mg124871] Re: ListInterpolate and missing values
- From: Ray Koopman <koopman at sfu.ca>
- Date: Fri, 10 Feb 2012 05:53:36 -0500 (EST)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <jh07i4$hq6$1@smc.vnet.net>
On Feb 9, 2:35 am, Mark Coleman <markspcole... at gmail.com> wrote: > Hi, > > I'm looking for a way to linearly interpolate missing values in a > large list of numbers such that the interpolated values reflect the > size of the "gap" between non-missing values. For instance, say I have > the following list: > > x={1,2,10,,12,2,6,6,,,12,22} > > The list x has two gaps. A gap of size "1" at x[4], and a gap a size > "2" at x[10]-x[11]. I'm looking for a linear interpolation method such > that > > x[4] = 11, > > x[10]=8, x[11]=10 > > That is, each of the interpolated values is a constant increment > between the two surrouding non-missing values. My actually problem has > millions of such lists, where gaps are dispersed randomly (In thinking > about his more, missing endpoints could also be interpolated by > "extending" the line between the two succeeeding or preceeding > points). > > I'm wondering if ListInterpolate can handle this sort of problem > directly? If not, any help would be much appreciated. > > Cheers, > > Mark x = {1,2,10,,12,2,6,6,,,12,22}; p = Position[x, Null] x[[Flatten@p]] = Interpolation[Delete[ Transpose@{Range@Length@x,x}, p], InterpolationOrder->1] @@@ p x {{4},{9},{10}} {11,8,10} {1,2,10,11,12,2,6,6,8,10,12,22}