def __init__(self, x, y, z, bbox=[None] * 4, kx=3, ky=3, s=0): x, y = ravel(x), ravel(y) if not all(diff(x) > 0.0): raise TypeError('x must be strictly increasing') if not all(diff(y) > 0.0): raise TypeError('y must be strictly increasing') if not ((x.min() == x[0]) and (x.max() == x[-1])): raise TypeError('x must be strictly ascending') if not ((y.min() == y[0]) and (y.max() == y[-1])): raise TypeError('y must be strictly ascending') if not x.size == z.shape[0]: raise TypeError('x dimension of z must have same number of ' 'elements as x') if not y.size == z.shape[1]: raise TypeError('y dimension of z must have same number of ' 'elements as y') z = ravel(z) xb, xe, yb, ye = bbox nx, tx, ny, ty, c, fp, ier = dfitpack.regrid_smth( x, y, z, xb, xe, yb, ye, kx, ky, s) if not ier in [0, -1, -2]: msg = _surfit_messages.get(ier, 'ier=%s' % (ier)) raise ValueError(msg) self.fp = fp self.tck = tx[:nx], ty[:ny], c[:(nx - kx - 1) * (ny - ky - 1)] self.degrees = kx, ky
def __init__(self, x, y, z, bbox = [None]*4, kx=3, ky=3, s=0): x,y = ravel(x),ravel(y) if not all(diff(x) > 0.0): raise TypeError,'x must be strictly increasing' if not all(diff(y) > 0.0): raise TypeError,'y must be strictly increasing' if not ((x.min() == x[0]) and (x.max() == x[-1])): raise TypeError, 'x must be strictly ascending' if not ((y.min() == y[0]) and (y.max() == y[-1])): raise TypeError, 'y must be strictly ascending' if not x.size == z.shape[0]: raise TypeError,\ 'x dimension of z must have same number of elements as x' if not y.size == z.shape[1]: raise TypeError,\ 'y dimension of z must have same number of elements as y' z = ravel(z) xb,xe,yb,ye = bbox nx,tx,ny,ty,c,fp,ier = dfitpack.regrid_smth(x,y,z, xb,xe,yb,ye, kx,ky,s) if ier in [0,-1,-2]: # normal return pass else: message = _surfit_messages.get(ier,'ier=%s' % (ier)) warnings.warn(message) self.fp = fp self.tck = tx[:nx],ty[:ny],c[:(nx-kx-1)*(ny-ky-1)] self.degrees = kx,ky
def __init__(self, x, y, z, kind='linear', copy=True, bounds_error=False, fill_value=np.nan): self.x, self.y, self.z = map(asarray, [x, y, z]) self.x, self.y = map(ravel, [self.x, self.y]) if self.z.size == len(self.x) * len(self.y): rectangular_grid = True if not all(self.x[1:] > self.x[:-1]): j = np.argsort(self.x) self.x = self.x[j] self.z = self.z[:, j] if not all(self.y[1:] > self.y[:-1]): j = np.argsort(self.y) self.y = self.y[j] self.z = self.z[j, :] self.z = ravel(self.z.T) else: rectangular_grid = False self.z = ravel(self.z) if len(self.x) != len(self.y): raise ValueError( "x and y must have equal lengths for non rectangular grid") if len(self.z) != len(self.x): raise ValueError( "Invalid length for input z for non rectangular grid") try: kx = ky = {'linear': 1, 'cubic': 3, 'quintic': 5}[kind] except KeyError: raise ValueError("Unsupported interpolation type.") if not rectangular_grid: # TODO: surfit is really not meant for interpolation! self.tck = fitpack.bisplrep(self.x, self.y, self.z, kx=kx, ky=ky, s=0.0) else: nx, tx, ny, ty, c, fp, ier = dfitpack.regrid_smth(self.x, self.y, self.z, None, None, None, None, kx=kx, ky=ky, s=0.0) self.tck = (tx[:nx], ty[:ny], c[:(nx - kx - 1) * (ny - ky - 1)], kx, ky)
def __init__(self, x, y, z, bbox = [None]*4, kx=3, ky=3, s=0): """ Input: x,y - 1-d sequences of coordinates in strictly ascending order z - 2-d array of data with shape (x.size,y.size) Optional input: bbox - 4-sequence specifying the boundary of the rectangular approximation domain. By default, bbox=[min(x,tx),max(x,tx), min(y,ty),max(y,ty)] kx,ky=3,3 - degrees of the bivariate spline. s - positive smoothing factor defined for estimation condition: sum((w[i]*(z[i]-s(x[i],y[i])))**2,axis=0) <= s Default s=0 which is for interpolation """ x,y = ravel(x),ravel(y) if not all(diff(x) > 0.0): raise TypeError,'x must be strictly increasing' if not all(diff(y) > 0.0): raise TypeError,'y must be strictly increasing' if not ((x.min() == x[0]) and (x.max() == x[-1])): raise TypeError, 'x must be strictly ascending' if not ((y.min() == y[0]) and (y.max() == y[-1])): raise TypeError, 'y must be strictly ascending' if not x.size == z.shape[0]: raise TypeError,\ 'x dimension of z must have same number of elements as x' if not y.size == z.shape[1]: raise TypeError,\ 'y dimension of z must have same number of elements as y' z = ravel(z) xb,xe,yb,ye = bbox nx,tx,ny,ty,c,fp,ier = dfitpack.regrid_smth(x,y,z, xb,xe,yb,ye, kx,ky,s) if ier in [0,-1,-2]: # normal return pass else: message = _surfit_messages.get(ier,'ier=%s' % (ier)) warnings.warn(message) self.fp = fp self.tck = tx[:nx],ty[:ny],c[:(nx-kx-1)*(ny-ky-1)] self.degrees = kx,ky
def __init__(self, x, y, z, kind='linear', copy=True, bounds_error=False, fill_value=np.nan): self.x, self.y, self.z = map(asarray, [x, y, z]) self.x, self.y = map(ravel, [self.x, self.y]) if self.z.size == len(self.x) * len(self.y): rectangular_grid = True if not all(self.x[1:] > self.x[:-1]): j = np.argsort(self.x) self.x = self.x[j] self.z = self.z[:,j] if not all(self.y[1:] > self.y[:-1]): j = np.argsort(self.y) self.y = self.y[j] self.z = self.z[j,:] self.z = ravel(self.z.T) else: rectangular_grid = False self.z = ravel(self.z) if len(self.x) != len(self.y): raise ValueError( "x and y must have equal lengths for non rectangular grid") if len(self.z) != len(self.x): raise ValueError( "Invalid length for input z for non rectangular grid") try: kx = ky = {'linear' : 1, 'cubic' : 3, 'quintic' : 5}[kind] except KeyError: raise ValueError("Unsupported interpolation type.") if not rectangular_grid: # TODO: surfit is really not meant for interpolation! self.tck = fitpack.bisplrep(self.x, self.y, self.z, kx=kx, ky=ky, s=0.0) else: nx, tx, ny, ty, c, fp, ier = dfitpack.regrid_smth( self.x, self.y, self.z, None, None, None, None, kx=kx, ky=ky, s=0.0) self.tck = (tx[:nx], ty[:ny], c[:(nx - kx - 1) * (ny - ky - 1)], kx, ky)