Ignore:
Timestamp:
13/10/09 10:44:23 (11 years ago)
Author:
pnorton
Message:

Improved the performance of the getUniqueValues method on the grid, also cached the result to avoid the cost of re-calculation.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • qesdi/geoplot/trunk/lib/geoplot/grid.py

    r5710 r5835  
    1010import numpy as N 
    1111import sets 
     12import time 
    1213 
    1314#third party modules 
     
    3132        self.midpointsX = midpointsX 
    3233        self.midpointsY = midpointsY 
    33         self.values = values 
     34        self._values = values 
    3435        self._uniqueValues = None 
    3536         
     
    5455        values between these bounds (inclusive) will be returned. 
    5556        """ 
    56         uniqueVals = list(sets.Set(self.values.compressed().tolist())) 
    57         uniqueVals.sort() 
     57         
     58        if self._uniqueValues is None: 
     59            st = time.time() 
     60            self._uniqueValues = N.unique(self.values) 
     61            log.debug(" unique sorted list in %s" % (time.time() - st,)) 
    5862         
    5963        if minVal != None and maxVal != None: 
    60             uniqueVals = filter(lambda x: minVal <= x <= maxVal, uniqueVals) 
     64            uniqueVals = filter(lambda x: minVal <= x <= maxVal, self._uniqueValues) 
     65            return N.array(uniqueVals) 
     66        else: 
     67            return self._uniqueValues 
    6168             
    62         return N.array(uniqueVals) 
     69         
    6370     
    6471    def getUniqueValueBounds(self, minVal=None, maxVal=None): 
     
    6976        """ 
    7077        return utils.getBounds(self.getUniqueValues(minVal, maxVal)) 
    71              
     78     
     79    def __get_values(self): 
     80        return self._values 
     81     
     82    def __set_values(self, value): 
     83        self._values = value 
     84        self._uniqueValues = None 
     85     
     86    values = property(__get_values, __set_values) 
     87     
     88     
    7289     
    7390if __name__ == '__main__': 
Note: See TracChangeset for help on using the changeset viewer.