Changeset 1150

Show
Ignore:
Timestamp:
07/20/08 12:52:34 (4 months ago)
Author:
mattknox_ca
Message:

performance improvement for getitem method

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/timeseries/scikits/timeseries/tseries.py

    r1125 r1150  
    506506        """ 
    507507        (sindx, dindx, recheck) = self._index_checker(indx) 
    508         _series = ndarray.__getattribute__(self, '_series') 
     508        _class = self.__class__ 
    509509        _dates = ndarray.__getattribute__(self, '_dates') 
    510510        try: 
    511             newseries = _series.__getitem__(sindx) 
     511            # temporarily change class to MaskedArray for indexing. MUCH 
     512            # faster than using a view due to complexity of __array_finalize__ 
     513            # for MaskedArray class 
     514            self.__class__ = MaskedArray 
     515            newseries = self.__getitem__(sindx) 
    512516        except IndexError: 
     517 
    513518            # We don't need to recheck the index: just raise an exception 
    514519            if not recheck: 
     
    521526                try: 
    522527                    indx = _dates.date_to_index(date_array(indx, 
    523                                                            freq=self.freq)) 
     528                                                           freq=_dates.freq)) 
    524529                except (IndexError, ValueError, DateError): 
    525530                    exc_info = sys.exc_info() 
     
    527532                    raise IndexError(msg), None, exc_info[2] 
    528533                else: 
    529                     newseries = _series.__getitem__(indx) 
     534                    newseries = self.__getitem__(indx) 
    530535                    dindx = indx 
    531536            else: 
    532                 newseries = _series.__getitem__(indx) 
     537                newseries = self.__getitem__(indx) 
    533538                dindx = indx 
     539        finally: 
     540            self.__class__ = _class 
     541 
    534542        # Don't find the date if it's not needed...... 
    535543        if np.isscalar(newseries) or (newseries is masked):