コード例 #1
0
ファイル: interpolate.py プロジェクト: yulongwudi/MeteoInfo
 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())
コード例 #2
0
 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()))
コード例 #3
0
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]
コード例 #4
0
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]
コード例 #5
0
ファイル: interpolate.py プロジェクト: yulongwudi/MeteoInfo
 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)
コード例 #6
0
ファイル: mitable.py プロジェクト: yangwy012210/MeteoInfo
 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
コード例 #7
0
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))
コード例 #8
0
ファイル: multiarray.py プロジェクト: songnku/MeteoInfo
 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]
コード例 #9
0
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()))
コード例 #10
0
ファイル: multiarray.py プロジェクト: songnku/MeteoInfo
    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
コード例 #11
0
ファイル: mitable.py プロジェクト: yangwy012210/MeteoInfo
    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)