def __init__(self, x, y, z, kind='linear'): if isinstance(x, list): x = NDArray(ArrayUtil.array(x)) if isinstance(y, list): y = NDArray(ArrayUtil.array(y)) if isinstance(z, list): z = NDArray(ArrayUtil.array(z)) self._func = InterpUtil.getBiInterpFunc(x.asarray(), y.asarray(), z.asarray())
def dimvalue(self, idx, convert=False): ''' Get dimension values. :param idx: (*int*) Dimension index. :param convert: (*boolean*) If convert to real values (i.e. datetime). Default is ``False``. :returns: (*array_like*) Dimension values ''' dim = self.dims[idx] if convert: if dim.getDimType() == DimensionType.T: return miutil.nums2dates(dim.getDimValue()) else: return np.array(ArrayUtil.array(self.dims[idx].getDimValue())) else: return np.array(ArrayUtil.array(self.dims[idx].getDimValue()))
def expfit(x, y, func=False): ''' Exponent fitting. :param x: (*array_like*) x data array. :param y: (*array_like*) y data array. :param func: (*boolean*) Return fit function (for predict function) or not. Default is ``False``. :returns: Fitting parameters and function (optional). ''' if isinstance(x, list): x = NDArray(ArrayUtil.array(x)) if isinstance(y, list): y = NDArray(ArrayUtil.array(y)) r = FittingUtil.expFit(x.asarray(), y.asarray()) if func: return r[0], r[1], r[2], r[3] else: return r[0], r[1], r[2]
def polyfit(x, y, degree, func=False): ''' Polynomail fitting. :param x: (*array_like*) x data array. :param y: (*array_like*) y data array. :param degree: (*int*) Degree of the fitting polynomial. :param func: (*boolean*) Return fit function (for predict function) or not. Default is ``False``. :returns: Fitting parameters and function (optional). ''' if isinstance(x, list): x = NDArray(ArrayUtil.array(x)) if isinstance(y, list): y = NDArray(ArrayUtil.array(y)) r = FittingUtil.polyFit(x.asarray(), y.asarray(), degree) if func: return r[0], r[1], r[2] else: return r[0], r[1]
def __call__(self, x, y): ''' Evaluate the interpolate vlaues. :param x: (*array_like*) X to evaluate the interpolant at. :param y: (*array_like*) Y to evaluate the interpolant at. ''' if isinstance(x, list): x = NDArray(ArrayUtil.array(x)) if isinstance(x, (NDArray, DimArray)): x = x.asarray() if isinstance(y, list): y = NDArray(ArrayUtil.array(y)) if isinstance(y, (NDArray, DimArray)): y = y.asarray() r = InterpUtil.evaluate(self._func, x, y) if isinstance(r, float): return r else: return NDArray(r)
def coldata(self, key): ''' Return column data as one dimension array. :param key: (*string*) Column name. :returns: (*NDArray*) Colomn data. ''' if isinstance(key, str): print key values = self.data.getColumnData(key).getDataValues() return NDArray(ArrayUtil.array(values)) return None
def predict(func, x): ''' Predict y value using fitting function and x value. :param func: (*Fitting function object*) Fitting function. :param x: (*float*) x value. :returns: (*float*) y value. ''' if isinstance(x, (int, float, long)): return func.predict(x) if isinstance(x, list): x = NDArray(ArrayUtil.array(x)) return NDArray(FittingUtil.predict(x.asarray(), func))
def __init__(self, array): if not isinstance(array, Array): array = ArrayUtil.array(array, None) self._array = array self.ndim = array.getRank() s = array.getShape() s1 = [] for i in range(len(s)): s1.append(s[i]) self._shape = tuple(s1) self.dtype = _dtype.fromjava(array.getDataType()) self.size = int(self._array.getSize()) self.iterator = array.getIndexIterator() self.base = None if self.ndim > 0: self.sizestr = str(self.shape[0]) if self.ndim > 1: for i in range(1, self.ndim): self.sizestr = self.sizestr + '*%s' % self.shape[i]
def polyval(p, x): """ Evaluate a polynomial at specific values. If p is of length N, this function returns the value: p[0]*x**(N-1) + p[1]*x**(N-2) + ... + p[N-2]*x + p[N-1] If x is a sequence, then p(x) is returned for each element of x. If x is another polynomial then the composite polynomial p(x(t)) is returned. :param p: (*array_like*) 1D array of polynomial coefficients (including coefficients equal to zero) from highest degree to the constant term. :param x: (*array_like*) A number, an array of numbers, or an instance of poly1d, at which to evaluate p. :returns: Polynomial value """ if isinstance(x, list): x = NDArray(ArrayUtil.array(x)) return NDArray(ArrayMath.polyVal(p, x.asarray()))
def __setitem__(self, indices, value): #print type(indices) if isinstance(indices, NDArray): if isinstance(value, NDArray): value = value.asarray() ArrayMath.setValue(self._array, indices._array, value) return None if not isinstance(indices, tuple): inds = [] inds.append(indices) indices = inds if len(indices) < self.ndim: for i in range(self.ndim - len(indices)): indices.append(slice(None)) if self.ndim == 0: self._array.setObject(0, value) return None if len(indices) != self.ndim: print 'indices must be ' + str(self.ndim) + ' dimensions!' raise IndexError() ranges = [] flips = [] onlyrange = True alllist = True for i in range(0, self.ndim): k = indices[i] if isinstance(k, int): sidx = k if sidx < 0: sidx = self._shape[i] + sidx eidx = sidx step = 1 alllist = False elif isinstance(k, (list, tuple, NDArray)): if isinstance(k, NDArray): k = k.aslist() onlyrange = False ranges.append(k) continue else: sidx = 0 if k.start is None else k.start if sidx < 0: sidx = self._shape[i] + sidx eidx = self._shape[i] if k.stop is None else k.stop if eidx < 0: eidx = self._shape[i] + eidx eidx -= 1 step = 1 if k.step is None else k.step alllist = False if step < 0: step = abs(step) flips.append(i) if eidx < sidx: return rr = Range(sidx, eidx, step) ranges.append(rr) if isinstance(value, (list, tuple)): value = ArrayUtil.array(value) if isinstance(value, NDArray): value = value.asarray() if onlyrange: r = ArrayMath.setSection(self._array, ranges, value) else: if alllist: r = ArrayMath.setSection_List(self._array, ranges, value) else: r = ArrayMath.setSection_Mix(self._array, ranges, value) self._array = r
def __getitem__(self, key): if isinstance(key, basestring): coldata = self.data.getColumnData(key) if coldata.getDataType().isNumeric(): return NDArray(ArrayUtil.array(coldata.getDataValues())) elif coldata.getDataType() == DataType.DATE: vv = coldata.getData() r = [] cal = Calendar.getInstance() for v in vv: cal.setTime(v) year = cal.get(Calendar.YEAR) month = cal.get(Calendar.MONTH) + 1 day = cal.get(Calendar.DAY_OF_MONTH) hour = cal.get(Calendar.HOUR_OF_DAY) minute = cal.get(Calendar.MINUTE) second = cal.get(Calendar.SECOND) dt = datetime.datetime(year, month, day, hour, minute, second) r.append(dt) return r else: return NDArray(ArrayUtil.array(coldata.getData())) hascolkey = True if isinstance(key, tuple): ridx = key[0] cidx = key[1] if isinstance(ridx, int) and isinstance(cidx, int): if ridx < 0: ridx = self.shape[0] + ridx if cidx < 0: cidx = self.shape[1] + cidx return self.data.getValue(ridx, cidx) elif isinstance(ridx, int) and isinstance(cidx, basestring): if ridx < 0: ridx = self.shape[0] + ridx return self.data.getValue(ridx, cidx) else: key = (key, slice(None)) hascolkey = False k = key[0] if isinstance(k, int): sidx = k if sidx < 0: sidx = self.shape[0] + sidx eidx = sidx + 1 step = 1 rowkey = Range(sidx, eidx, step) elif isinstance(k, slice): if isinstance(k.start, basestring): t = miutil.str2date(k.start) t = miutil.jdate(t) sidx = self.data.getTimeIndex(t) if sidx < 0: sidx = 0 else: sidx = 0 if k.start is None else k.start if sidx < 0: sidx = self.shape[0] + sidx if isinstance(k.stop, basestring): t = miutil.str2date(k.stop) t = miutil.jdate(t) eidx = self.data.getTimeIndex(t) + 1 if eidx < 0: eidx = self.shape[0] else: eidx = self.shape[0] if k.stop is None else k.stop if eidx < 0: eidx = self.shape[0] + eidx step = 1 if k.step is None else k.step rowkey = Range(sidx, eidx, step) elif isinstance(k, list): if isinstance(k[0], basestring): tlist = [] for tstr in k: t = miutil.jdate(miutil.str2date(tstr)) idx = self.data.getTimeIndex_Ex(t) if idx >= 0: tlist.append(idx) rowkey = tlist else: rowkey = k else: return None tcolname = self.data.getTimeColName() if not hascolkey: r = self.data.select(rowkey) if r.findColumn(tcolname) is None: r = TableData(r) else: r = TimeTableData(r, tcolname) return PyTableData(r) k = key[1] if isinstance(k, int): sidx = k if sidx < 0: sidx = self.shape[1] + sidx eidx = sidx + 1 step = 1 colkey = Range(sidx, eidx, step) elif isinstance(k, slice): sidx = 0 if k.start is None else k.start if sidx < 0: sidx = self.shape[1] + sidx eidx = self.shape[1] if k.stop is None else k.stop if eidx < 0: eidx = self.shape[1] + eidx step = 1 if k.step is None else k.step colkey = Range(sidx, eidx, step) elif isinstance(k, list): if isinstance(k[0], basestring): cols = self.data.findColumns(k) else: cols = self.data.findColumns_Index(k) colkey = cols elif isinstance(k, basestring): rows = self.data.getRows(rowkey) coldata = self.data.getColumnData(rows, k) if coldata.getDataType().isNumeric(): return NDArray(ArrayUtil.array(coldata.getDataValues())) else: return NDArray(ArrayUtil.array(coldata.getData())) else: return None r = self.data.select(rowkey, colkey) if r.findColumn(tcolname) is None: r = TableData(r) else: r = TimeTableData(r, tcolname) return PyTableData(r)