def __getitem__(self, key): if isinstance(key, (str, unicode)): coldata = self.data.getColumnData(key) if coldata.getDataType().isNumeric(): return MIArray(ArrayUtil.array(coldata.getDataValues())) elif coldata.getDataType() == DataTypes.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 MIArray(ArrayUtil.array(coldata.getData())) else: row = key[0] col = key[1] return self.data.getValue(row, col) return None
def project(self, x=None, y=None, toproj=None, method='bilinear'): """ Project array :param x: To x coordinates. :param y: To y coordinates. :param toproj: To projection. :param method: Interpolation method: ``bilinear`` or ``neareast`` . :returns: (*MIArray*) Projected array """ yy = self.dims[self.ndim - 2].getDimValue() xx = self.dims[self.ndim - 1].getDimValue() if toproj is None: toproj = self.proj if x is None or y is None: pr = ArrayUtil.reproject(self.array.array, xx, yy, self.proj, toproj) r = pr[0] x = pr[1] y = pr[2] dims = [] ydim = Dimension() ydim.setDimValues(MIArray(y).aslist()) dims.append(ydim) xdim = Dimension() xdim.setDimValues(MIArray(x).aslist()) dims.append(xdim) rr = DimArray(MIArray(r), dims, self.fill_value, toproj) return rr if method == 'bilinear': method = ResampleMethods.Bilinear else: method = ResampleMethods.NearestNeighbor if isinstance(x, list): r = ArrayUtil.reproject(self.array.array, xx, yy, x, y, self.proj, toproj, self.fill_value, method) elif isinstance(x, MIArray): if x.rank == 1: r = ArrayUtil.reproject(self.array.array, xx, yy, x.aslist(), y.aslist(), self.proj, toproj, self.fill_value, method) else: r = ArrayUtil.reproject(self.array.array, xx, yy, x.asarray(), y.asarray(), self.proj, toproj, self.fill_value, method) else: r = ArrayUtil.reproject(self.array.array, xx, yy, x.asarray(), y.asarray(), self.proj, toproj, self.fill_value, method) #r = ArrayUtil.reproject(self.array.array, xx, yy, x.asarray(), y.asarray(), self.proj, toproj, self.fill_value, method) return MIArray(r)
def maskout(self, mask): if isinstance(mask, (MIArray, DimArray)): r = ArrayMath.maskout(self.asarray(), mask.asarray()) return DimArray(MIArray(r), self.dims, self.fill_value, self.proj) else: x = self.dims[1].getDimValue() y = self.dims[0].getDimValue() if not isinstance(mask, (list, ArrayList)): mask = [mask] r = ArrayMath.maskout(self.asarray(), x, y, mask) r = DimArray(MIArray(r), self.dims, self.fill_value, self.proj) return r
def tostation(self, x, y): gdata = self.asgriddata() if isinstance(x, MIArray) or isinstance(x, DimArray): r = gdata.data.toStation(x.aslist(), y.aslist()) return MIArray(ArrayUtil.array(r)) else: return gdata.data.toStation(x, y)
def dimvalue(self, idx=0, 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 MIArray(ArrayUtil.array(self.dims[idx].getDimValue())) else: return MIArray(ArrayUtil.array(self.dims[idx].getDimValue()))
def maskout(self, mask): ''' Maskout data by polygons - the elements outside polygons will be set as NaN. :param mask: (*list*) Polygon list as mask borders. :returns: (*DimArray*) Maskouted data. ''' if isinstance(mask, MIArray): r = ArrayMath.maskout(self.asarray(), mask.asarray()) return DimArray(MIArray(r), self.dims, self.fill_value, self.proj) else: x = self.dims[1].getDimValue() y = self.dims[0].getDimValue() if not isinstance(mask, (list, ArrayList)): mask = [mask] r = ArrayMath.maskout(self.asarray(), x, y, mask) r = DimArray(MIArray(r), self.dims, self.fill_value, self.proj) return r
def griddata(self, xi=None, **kwargs): method = kwargs.pop('method', 'idw') fill_value = self.data.missingValue x_s = MIArray(ArrayUtil.array(self.data.getXList())) y_s = MIArray(ArrayUtil.array(self.data.getYList())) if xi is None: xn = int(math.sqrt(len(x_s))) yn = xn x_g = MIArray(ArrayUtil.lineSpace(x_s.min(), x_s.max(), xn, True)) y_g = MIArray(ArrayUtil.lineSpace(y_s.min(), y_s.max(), yn, True)) else: x_g = xi[0] y_g = xi[1] if isinstance(x_s, MIArray): x_s = x_s.aslist() if isinstance(y_s, MIArray): y_s = y_s.aslist() if isinstance(x_g, MIArray): x_g = x_g.aslist() if isinstance(y_g, MIArray): y_g = y_g.aslist() if method == 'idw': pnum = kwargs.pop('pointnum', 2) radius = kwargs.pop('radius', None) if radius is None: r = self.data.interpolate_Neighbor(x_g, y_g, pnum, fill_value) return PyGridData(r) else: r = self.data.interpolate_Radius(x_g, y_g, pnum, radius, fill_value) return PyGridData(r) elif method == 'cressman': radius = kwargs.pop('radius', [10, 7, 4, 2, 1]) if isinstance(radius, MIArray): radius = radius.aslist() r = self.data.interpolate_Cressman(x_g, y_g, radius, fill_value) return PyGridData(r) elif method == 'neareast': r = self.data.interpolate_Assign(x_g, y_g, fill_value) return PyGridData(r) else: return None
def coldata(self, key): ''' Return column data as one dimension array. :param key: (*string*) Column name. :returns: (*MIArray*) Colomn data. ''' if isinstance(key, str): print key values = self.data.getColumnData(key).getDataValues() return MIArray(ArrayUtil.array(values)) return None
def __getitem__(self, key): rr = self.__getkey(key) ikey = rr[0] rdata = self.data.__getitem__(ikey) if isinstance(ikey, int): return rdata else: rindex = rr[1] if rindex is None: rindex = self.index.__getitem__(ikey) else: if len(rr) == 4: rfdata = rr[2] rindex = list(rr[3]) rdata = MIArray(SeriesUtil.fillKeyList(rdata.asarray(), rfdata)) r = Series(rdata, rindex) return r
def transpose(self): ''' Transpose 2-D array. :returns: Transposed array. ''' if self.ndim == 1: return self[:] dim1 = 0 dim2 = 1 r = ArrayMath.transpose(self.asarray(), dim1, dim2) dims = [] for i in range(0, self.ndim): if i == dim1: dims.append(self.dims[dim2]) elif i == dim2: dims.append(self.dims[dim1]) else: dims.append(self.dims[i]) return DimArray(MIArray(r), dims, self.fill_value, self.proj)
def join(self, b, dimidx): r = ArrayMath.join(self.array, b.array, dimidx) dima = self.dimvalue(dimidx) dimb = b.dimvalue(dimidx) dimr = [] if dima[0] < dimb[0]: for i in range(0, len(dima)): dimr.append(dima[i]) for i in range(0, len(dimb)): dimr.append(dimb[i]) else: for i in range(0, len(dimb)): dimr.append(dimb[i]) for i in range(0, len(dima)): dimr.append(dima[i]) rdims = [] for i in range(0, len(self.dims)): if i == dimidx: ndim = Dimension() ndim.setDimValues(dimr) rdims.append(ndim) else: rdims.append(self.dims[i]) return DimArray(MIArray(r), rdims, self.fill_value, self.proj)
def __getitem__(self, indices): if indices is None: rr = self.dataset.read(self.name) if rr.getDataType().isNumeric(): ArrayMath.missingToNaN(rr, self.fill_value) array = MIArray(rr) data = DimArray(array, self.dims, self.fill_value, self.dataset.proj) return data else: return rr if isinstance(indices, str): #metadata rr = self.dataset.read(self.name) m = rr.findMember(indices) data = rr.getArray(0, m) return MIArray(data) if not isinstance(indices, tuple): inds = [] inds.append(indices) indices = inds if len(indices) != self.ndim: print 'indices must be ' + str(self.ndim) + ' dimensions!' return None origin = [] size = [] stride = [] dims = [] for i in range(0, self.ndim): dimlen = self.dimlen(i) k = indices[i] if isinstance(k, int): sidx = k eidx = k step = 1 elif isinstance(k, slice): sidx = 0 if k.start is None else k.start eidx = self.dimlen(i) - 1 if k.stop is None else k.stop step = 1 if k.step is None else k.step elif isinstance(k, (tuple, list)): dim = self.variable.getDimension(i) sidx = dim.getValueIndex(k[0]) if len(k) == 1: eidx = sidx step = 1 else: eidx = dim.getValueIndex(k[1]) if len(k) == 2: step = 1 else: step = int(k[2] / dim.getDeltaValue) if sidx > eidx: iidx = eidx eidx = sidx sidx = iidx else: print k return None if eidx >= dimlen: print 'Index out of range!' return None origin.append(sidx) n = eidx - sidx + 1 size.append(n) if n > 1: dim = self.variable.getDimension(i) if dim.isReverse(): step = -step dims.append(dim.extract(sidx, eidx, step)) stride.append(step) rr = self.dataset.read(self.name, origin, size, stride).reduce() if rr.getSize() == 1: return rr.getObject(0) ArrayMath.missingToNaN(rr, self.fill_value) array = MIArray(rr) data = DimArray(array, dims, self.fill_value, self.dataset.proj) return data
def asdimarray(self): a = self.data.getArray() dims = self.data.getDimensions() return DimArray(MIArray(a), dims, self.data.missingValue, self.data.projInfo)
def attrvalue(self, key): attr = self.dataset.getDataInfo().findGlobalAttribute(key) if attr is None: return None v = MIArray(attr.getValues()) return v
def __getitem__(self, indices): #print type(indices) if not isinstance(indices, tuple): inds = [] inds.append(indices) indices = inds if len(indices) != self.ndim: print 'indices must be ' + str(self.ndim) + ' dimensions!' raise IndexError() if not self.proj is None and not self.proj.isLonLat(): xlim = None ylim = None xidx = -1 yidx = -1 for i in range(0, self.ndim): dim = self.dims[i] if dim.getDimType() == DimensionType.X: k = indices[i] #if isinstance(k, (tuple, list)): if isinstance(k, basestring): xlims = k.split(':') xlim = [float(xlims[0]), float(xlims[1])] xidx = i elif dim.getDimType() == DimensionType.Y: k = indices[i] #if isinstance(k, (tuple, list)): if isinstance(k, basestring): ylims = k.split(':') ylim = [float(ylims[0]), float(ylims[1])] yidx = i if not xlim is None and not ylim is None: fromproj=KnownCoordinateSystems.geographic.world.WGS1984 inpt = PointD(xlim[0], ylim[0]) outpt1 = Reproject.reprojectPoint(inpt, fromproj, self.proj) inpt = PointD(xlim[1], ylim[1]) outpt2 = Reproject.reprojectPoint(inpt, fromproj, self.proj) xlim = [outpt1.X, outpt2.X] ylim = [outpt1.Y, outpt2.Y] indices1 = [] for i in range(0, self.ndim): if i == xidx: #indices1.append(xlim indices1.append(str(xlim[0]) + ':' + str(xlim[1])) elif i == yidx: #indices1.append(ylim) indices1.append(str(ylim[0]) + ':' + str(ylim[1])) else: indices1.append(indices[i]) indices = indices1 #origin = [] #size = [] #stride = [] dims = [] ranges = [] flips = [] iszerodim = True onlyrange = True for i in range(0, self.ndim): isrange = True k = indices[i] if isinstance(k, int): if k < 0: k = self.dims[i].getLength() + k sidx = k eidx = k step = 1 elif isinstance(k, slice): sidx = 0 if k.start is None else k.start if sidx < 0: sidx = self.dims[i].getLength() + sidx eidx = self.dims[i].getLength()-1 if k.stop is None else k.stop-1 if eidx < 0: eidx = self.dims[i].getLength() + eidx step = 1 if k.step is None else k.step elif isinstance(k, list): if not isinstance(k[0], datetime.datetime): onlyrange = False isrange = False ranges.append(k) else: sv = k[0] sv = miutil.date2num(sv) dim = self.dims[i] sidx = dim.getValueIndex(sv) if len(k) == 1: eidx = sidx step = 1 else: ev = k[1] ev = miutil.date2num(ev) eidx = dim.getValueIndex(ev) if len(k) == 2: step = 1 else: nv = k[2] nv = miutil.date2num(k[0] + k[2]) - sv step = int(nv / dim.getDeltaValue()) if sidx > eidx: iidx = eidx eidx = sidx sidx = iidx elif isinstance(k, basestring): dim = self.dims[i] kvalues = k.split(':') sidx = dim.getValueIndex(float(kvalues[0])) if len(kvalues) == 1: eidx = sidx step = 1 else: eidx = dim.getValueIndex(float(kvalues[1])) if len(kvalues) == 2: step = 1 else: step = int(float(kvalues[2]) / dim.getDeltaValue()) if sidx > eidx: iidx = eidx eidx = sidx sidx = iidx else: print k raise IndexError() if isrange: if sidx >= self.shape[i]: raise IndexError() if sidx != eidx: iszerodim = False if step < 0: step = abs(step) flips.append(i) rr = Range(sidx, eidx, step) ranges.append(rr) #origin.append(sidx) n = eidx - sidx + 1 #size.append(n) #stride.append(step) if n > 1: dim = self.dims[i] dims.append(dim.extract(sidx, eidx, step)) else: if len(k) > 1: dim = self.dims[i] dims.append(dim.extract(k)) #r = ArrayMath.section(self.array.array, origin, size, stride) if onlyrange: r = ArrayMath.section(self.array.array, ranges) else: r = ArrayMath.take(self.array.array, ranges) if r.getSize() == 1: return r.getObject(0) else: for i in flips: r = r.flip(i) rr = Array.factory(r.getDataType(), r.getShape()); MAMath.copy(rr, r); array = MIArray(rr) data = DimArray(array, dims, self.fill_value, self.proj) return data
def dimvalue(self, idx=0): return MIArray(ArrayUtil.array(self.dims[idx].getDimValue()))
def __getitem__(self, indices): #print type(indices) if not isinstance(indices, tuple): inds = [] inds.append(indices) indices = inds allint = True aindex = self.array.getIndex() i = 0 for ii in indices: if isinstance(ii, int): if ii < 0: ii = self.shape[i] + ii aindex.setDim(i, ii) else: allint = False break; i += 1 if allint: return self.array.getObject(aindex) if len(indices) != self.ndim: print 'indices must be ' + str(self.ndim) + ' dimensions!' raise IndexError() if not self.proj is None and not self.proj.isLonLat(): xlim = None ylim = None xidx = -1 yidx = -1 for i in range(0, self.ndim): dim = self.dims[i] if dim.getDimType() == DimensionType.X: k = indices[i] #if isinstance(k, (tuple, list)): if isinstance(k, basestring): xlims = k.split(':') xlim = [float(xlims[0]), float(xlims[1])] xidx = i elif dim.getDimType() == DimensionType.Y: k = indices[i] #if isinstance(k, (tuple, list)): if isinstance(k, basestring): ylims = k.split(':') ylim = [float(ylims[0]), float(ylims[1])] yidx = i if not xlim is None and not ylim is None: fromproj=KnownCoordinateSystems.geographic.world.WGS1984 inpt = PointD(xlim[0], ylim[0]) outpt1 = Reproject.reprojectPoint(inpt, fromproj, self.proj) inpt = PointD(xlim[1], ylim[1]) outpt2 = Reproject.reprojectPoint(inpt, fromproj, self.proj) xlim = [outpt1.X, outpt2.X] ylim = [outpt1.Y, outpt2.Y] indices1 = [] for i in range(0, self.ndim): if i == xidx: #indices1.append(xlim indices1.append(str(xlim[0]) + ':' + str(xlim[1])) elif i == yidx: #indices1.append(ylim) indices1.append(str(ylim[0]) + ':' + str(ylim[1])) else: indices1.append(indices[i]) indices = indices1 ndims = [] ranges = [] flips = [] iszerodim = True onlyrange = True alllist = True isempty = False nshape = [] for i in range(0, self.ndim): isrange = True k = indices[i] if isinstance(k, int): if k < 0: k = self.dims[i].getLength() + k sidx = k eidx = k step = 1 alllist = False elif isinstance(k, slice): if isinstance(k.start, basestring): sv = float(k.start) sidx = self.dims[i].getValueIndex(sv) elif isinstance(k.start, datetime.datetime): sv = miutil.date2num(k.start) sidx = self.dims[i].getValueIndex(sv) else: sidx = 0 if k.start is None else k.start if sidx < 0: sidx = self.dims[i].getLength() + sidx if isinstance(k.stop, basestring): ev = float(k.stop) eidx = self.dims[i].getValueIndex(ev) elif isinstance(k.stop, datetime.datetime): ev = miutil.date2num(k.stop) eidx = self.dims[i].getValueIndex(ev) else: eidx = self.dims[i].getLength() if k.stop is None else k.stop if eidx < 0: eidx = self.dims[i].getLength() + eidx eidx -= 1 if isinstance(k.step, basestring): nv = float(k.step) + self.dims[i].getDimValue()[0] nidx = self.dims[i].getValueIndex(nv) step = nidx - sidx elif isinstance(k.step, datetime.timedelta): nv = miutil.date2num(k.start + k.step) nidx = self.dims[i].getValueIndex(nv) step = nidx - sidx else: step = 1 if k.step is None else k.step alllist = False elif isinstance(k, list): onlyrange = False isrange = False if not isinstance(k[0], datetime.datetime): ranges.append(k) else: tlist = [] for tt in k: sv = miutil.date2num(tt) idx = self.dims[i].getValueIndex(sv) tlist.append(idx) ranges.append(tlist) k = tlist elif isinstance(k, basestring): dim = self.dims[i] kvalues = k.split(':') sidx = dim.getValueIndex(float(kvalues[0])) if len(kvalues) == 1: eidx = sidx step = 1 else: eidx = dim.getValueIndex(float(kvalues[1])) if len(kvalues) == 2: step = 1 else: step = int(float(kvalues[2]) / dim.getDeltaValue()) if sidx > eidx: iidx = eidx eidx = sidx sidx = iidx alllist = False else: print k raise IndexError() if isrange: if sidx >= self.shape[i]: raise IndexError() if sidx != eidx: iszerodim = False if step < 0: step = abs(step) flips.append(i) if eidx < sidx: tempidx = sidx sidx = eidx + 2 eidx = tempidx if eidx < sidx: isempty = True else: rr = Range(sidx, eidx, step) ranges.append(rr) n = eidx - sidx + 1 if n > 1: dim = self.dims[i] ndims.append(dim.extract(sidx, eidx, step)) nshape.append(eidx - sidx + 1 if eidx - sidx >= 0 else 0) else: if len(k) > 1: dim = self.dims[i] ndims.append(dim.extract(k)) if isempty: r = ArrayUtil.zeros(nshape, 'int') return MIArray(r) if onlyrange: r = ArrayMath.section(self.array, ranges) else: if alllist: r = ArrayMath.takeValues(self.array, ranges) return MIArray(r) else: r = ArrayMath.take(self.array, ranges) if r.getSize() == 1: return r.getObject(0) else: for i in flips: r = r.flip(i) rr = Array.factory(r.getDataType(), r.getShape()); MAMath.copy(rr, r); array = MIArray(rr) data = DimArray(array, ndims, self.fill_value, self.proj) return data
def value(self, indices): #print type(indices) if not isinstance(indices, tuple): inds = [] inds.append(indices) indices = inds if len(indices) != self.ndim: print 'indices must be ' + str(self.ndim) + ' dimensions!' return None #origin = [] #size = [] #stride = [] dims = [] ranges = [] flips = [] for i in range(0, self.ndim): k = indices[i] if isinstance(indices[i], int): sidx = k eidx = k step = 1 elif isinstance(k, slice): sidx = 0 if k.start is None else k.start eidx = self.dims[i].getLength()-1 if k.stop is None else k.stop step = 1 if k.step is None else k.step elif isinstance(k, tuple) or isinstance(k, list): dim = self.dims[i] sidx = dim.getValueIndex(k[0]) if len(k) == 1: eidx = sidx step = 1 else: eidx = dim.getValueIndex(k[1]) if len(k) == 2: step = 1 else: step = int(k[2] / dim.getDeltaValue) else: print k return None if step < 0: step = abs(step) flips.append(i) rr = Range(sidx, eidx, step) ranges.append(rr) #origin.append(sidx) n = eidx - sidx + 1 #size.append(n) #stride.append(step) if n > 1: dim = self.dims[i] dims.append(dim.extract(sidx, eidx, step)) #r = ArrayMath.section(self.array, origin, size, stride) r = ArrayMath.section(self.array, ranges) for i in flips: r = r.flip(i) rr = Array.factory(r.getDataType(), r.getShape()); MAMath.copy(rr, r); array = MIArray(rr) data = DimArray(array, dims, self.fill_value, self.proj) return data
def toarray(self): r = ArrayUtil.getArraysFromStationData(self.data) return MIArray(r[0]), MIArray(r[1]), MIArray(r[2])
def attrvalue(self, key): attr = self.variable.findAttribute(key) if attr is None: return None v = MIArray(attr.getValues()) return v
def __getitem__(self, key): if isinstance(key, basestring): coldata = self.data.getColumnData(key) if coldata.getDataType().isNumeric(): return MIArray(ArrayUtil.array(coldata.getDataValues())) elif coldata.getDataType() == DataTypes.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 MIArray(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 MIArray(ArrayUtil.array(coldata.getDataValues())) else: return MIArray(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)
def read(self): return MIArray(self.dataset.read(self.name))