def _train(self, ds): # local binding method = self.__method # two major modes if method == 'union': # slice mask default: take none mask = np.zeros(ds.shape[1], dtype=np.bool) # method: OR cfunc = np.logical_or elif method == 'intersection': # slice mask default: take all mask = np.ones(ds.shape[1], dtype=np.bool) # method: AND cfunc = np.logical_and else: raise ValueError("Unknown combining method '%s'" % method) for fs in self.__selectors: # first: train all embedded selections fs.train(ds) # now get boolean mask of selections fsmask = np.zeros(mask.shape, dtype=np.bool) # use slicearg to select features fsmask[fs._slicearg] = True # merge with current global mask mask = cfunc(mask, fsmask) # turn the derived boolean mask into a slice if possible slicearg = mask2slice(mask) # and assign to baseclass, done self._safe_assign_slicearg(slicearg)
def _call(self, ds): # attribute to detect boundaries battr = ds.sa[self.get_space()].value # filter which samples to keep filter_ = np.ones(battr.shape, dtype='bool') # determine boundary indices -- shift by one to have the new value # as the boundary bindices = (battr[:-1] != battr[1:]).nonzero()[0] + 1 # for all boundaries for b in bindices: lower = b - self._prestrip upper = b + self._poststrip filter_[lower:upper] = False filter_ = mask2slice(filter_) return ds[filter_]