RE: [Numpy-discussion] interpolating arrays (?)
The nd_image module in numarray has a spline intrpolation function (spline_filter1d). I've tried it, and it is OK. Nadav. -----Original Message----- From: Ray Schumacher [mailto:rays@blue-cove.com] Sent: Tue 23-Mar-04 03:11 To: numpy-discussion@lists.sourceforge.net Cc: Subject: [Numpy-discussion] interpolating arrays (?) Howdy, I'd like to resize an array (1-dimensional) a of length n into an array of n+x, and interpolate the values as necessary. x might be+/-200, len(a) is usually ~500 I tried it in pure Python but it's not quite right yet. (rubberBand, below) Someone out there must have done this... and linear interpolation for values is probably sufficient (instead of bi-cubic or some such) Cheers, Ray ================================================================== startSlice = 10000 endOfSlice = 10000+int(round(self.samplesPerRotation)) #self.samplesPerRotation=661 ## self.dataArray is about len=200,000 of Int for delta in range(-2,3): ## interpolate the different slices to the original length ## 0 should return the same array, this is a test newArray = self.rubberBand( self.dataArray[startSlice:endOfSlice+delta], round(self.samplesPerRotation)) print len(self.dataArray[startSlice:endOfSlice+delta]), len(newArray), ## show the result print delta, Numeric.sum(self.dataArray[startSlice:endOfSlice] - newArray) def rubberBand(self, data, desiredLength): """ alias/interpolate the data so that it is adjusted to the desired array length""" currentLength = float(len(data)) ## positive if the new array is to be longer difference = desiredLength - currentLength #print difference, desiredLength, currentLength ## set up the desired length array newData = Numeric.zeros(desiredLength, Numeric.Float) ## accounts for binary rounding errors smallNum = 2**-14 for index in range(desiredLength): ## find the ratio of the current index to the desired length ratio = index / float(desiredLength) ## find the same (float) position in the old data currIndex = int(ratio * currentLength) ## find the decimal part decimalPart = (ratio * currentLength) - currIndex print index, currIndex, decimalPart, if(decimalPart>smallNum): ## interpolate newData[index] = ((1 - decimalPart) * data[currIndex] + decimalPart * data[currIndex+1]) print data[currIndex], data[currIndex+1], newData[index] else: newData[index] = data[currIndex] print 'else',data[currIndex], newData[index] return newData ------------------------------------------------------- This SF.Net email is sponsored by: IBM Linux Tutorials Free Linux tutorial presented by Daniel Robbins, President and CEO of GenToo technologies. Learn everything from fundamentals to system administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click _______________________________________________ Numpy-discussion mailing list Numpy-discussion@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/numpy-discussion
participants (1)
-
Nadav Horesh