Ejemplo n.º 1
0
def aggregate(dataset, timeline, aggregator=None, **aggregator_param):
    
    # nothing to aggregate if dataset and/or timeline are/is empty
    if dataset.isEmpty() or timeline.isEmpty():
        return PYODataset.Empty()
    
    # params will be passed to the aggregator function
    # it is meant to contain the user-provided parameters
    # and additional parameters (such as the current timerange)
    params = {}
    for p, param in enumerate(aggregator_param):
        params[param] = aggregator_param[param]
    
    nTimeranges = timeline.getNumberOfTimeranges()
    datas = [None] * nTimeranges
    number = np.zeros((nTimeranges, ), dtype=np.int32)
    for t, timerange in enumerate(timeline):
        
        subdataset = sub(dataset, timerange)
        
        # try and aggregate subdataset:
        # some aggregator may fail in case of empty dataset
        # some other may return something
        
        try:
            if aggregator == None:
                datas[t] = np.copy(subdataset.data)
            else:
                params['timerange'] = timerange
                datas[t] = aggregator(subdataset, **params)
            number[t] = datas[t].shape[0]            
        except Exception, e:
            raise e
            datas[t] = None
            number[t] = 0
Ejemplo n.º 2
0
 def __init__(self, data, number, timeline):
     super(PYODataset, self).__init__()
     
     if data == None or data.shape == (0,) or number == None or timeline == None or number.shape[0] != timeline.getNumberOfTimeranges():
         self._data = np.array(())
         self._number = np.array((), dtype=np.int32)
         self._position = np.array((), dtype=np.int32)
         self._timeline = PYOTimeline.Empty()
         return
         
     self._data = data
     self._timeline = timeline
     
     stored, dimension = self._data.shape
     self._number = np.array(np.copy(number), dtype=np.int32)
     self._position = np.copy(self._number)
     self._position[1:] = self._number[:-1].cumsum()
     self._position[0]  = 0