Mercurial > pylearn
view doc/v2_planning/dataset.py @ 1169:3a1225034751
merge
author | Pascal Lamblin <lamblinp@iro.umontreal.ca> |
---|---|
date | Fri, 17 Sep 2010 14:29:49 -0400 |
parents | 9686c0d9689d |
children |
line wrap: on
line source
class DataColumn(object): def __init__(self, loader, **metadata): self.loader = loader self.batch_size = 0 self.modulo = None self.metadata = metadata def __getitem__(self, idx): if isinstance(idx, slice): return self.loader.getitem(idx.start, idx.stop) else: return self.loader.getitem(idx, idx+1) def group(size, modulo): self.batch_size = size self.module = modulo def __iter__(self): return DsetIter(self, self.size, self.modulo) def get_sub_datacolumn(self, i, j): return DataColumn(DsetLoader(self, i, j), **self.metadata) def length(self): return self.loader.length() class DsetIter(object): def __init__(self, dset, size, modulo): self.dset = dset self.size = size self.modulo = modulo self.pos = 0 def __iter__(self): return self def next(self): res = self.dset[self.pos*self.size:(self.pos+self.size)*self.size] if len(res) == 0: raise StopIteration if len(res) != self.size: if modulo == True: return res if modulo == False: raise StopIteration class DsetLoader(object): def __init__(self, dset, start, stop): self.dset = dset self.start = start self.stop = stop if self.start is None: self.start = 0 if self.stop is None: self.stop = self.dset.length() def getitem(self, i, j): if self.stop is None: return self.dset[self.start+i:self.start+j] else: return self.dset[min(self.start+i, self.stop): min(self.start+j, self.stop)] def length(self): if self.stop is None: return None else: return self.stop - self.start class Dataset(object): def __init__(self, cols): self.cols = cols def get_sub_dataset(self, start, stop): return Dataset([c.get_sub_datacolumn(start, stop) for c in self.cols]) # we could have the __getitem__ interface and the iterator interface also