Mercurial > hg > nsaunier > traffic-intelligence
comparison python/indicators.py @ 287:66691c06928c
first version of indicator LCSS
| author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
|---|---|
| date | Sun, 27 Jan 2013 00:51:48 -0500 |
| parents | fa95796a76b3 |
| children | 93d851d0d21e |
comparison
equal
deleted
inserted
replaced
| 286:fa95796a76b3 | 287:66691c06928c |
|---|---|
| 32 self.timeInterval = moving.TimeInterval(instants[0], instants[-1]) | 32 self.timeInterval = moving.TimeInterval(instants[0], instants[-1]) |
| 33 else: | 33 else: |
| 34 self.timeInterval = moving.TimeInterval() | 34 self.timeInterval = moving.TimeInterval() |
| 35 self.maxValue = maxValue | 35 self.maxValue = maxValue |
| 36 | 36 |
| 37 def __len__(self): | |
| 38 return len(self.values) | |
| 39 | |
| 37 def empty(self): | 40 def empty(self): |
| 38 return len(self.values) == 0 | 41 return len(self.values) == 0 |
| 39 | 42 |
| 40 def __getitem__(self, i): | 43 def __getitem__(self, i): |
| 41 'Returns ith value' | 44 'Returns ith value in time interval' |
| 45 if i in self.values.keys(): | |
| 46 return self.values[i] | |
| 47 else: | |
| 48 return None | |
| 49 | |
| 50 def getIthValue(self, i): | |
| 42 sortedKeys = sorted(self.values.keys()) | 51 sortedKeys = sorted(self.values.keys()) |
| 43 if 0<=i<len(sortedKeys): | 52 if 0<=i<len(sortedKeys): |
| 44 return self.values[sortedKeys[i]] | 53 return self.values[sortedKeys[i]] |
| 45 else: | 54 else: |
| 46 return None | 55 return None |
| 47 | |
| 48 def valueAtInstant(self, i): | |
| 49 if i in self.values.keys(): | |
| 50 return self.values[i] | |
| 51 else: | |
| 52 return None | |
| 53 | |
| 54 def __len__(self): | |
| 55 return len(self.values) | |
| 56 | 56 |
| 57 def __iter__(self): | 57 def __iter__(self): |
| 58 self.iterInstantNum = 0 # index in the interval or keys of the dict | 58 self.iterInstantNum = 0 # index in the interval or keys of the dict |
| 59 return self | 59 return self |
| 60 | 60 |
| 62 if self.iterInstantNum >= len(self.values):#(self.timeInterval and self.iterInstantNum>=self.timeInterval.length())\ | 62 if self.iterInstantNum >= len(self.values):#(self.timeInterval and self.iterInstantNum>=self.timeInterval.length())\ |
| 63 # or (self.iterInstantNum >= self.values) | 63 # or (self.iterInstantNum >= self.values) |
| 64 raise StopIteration | 64 raise StopIteration |
| 65 else: | 65 else: |
| 66 self.iterInstantNum += 1 | 66 self.iterInstantNum += 1 |
| 67 return self.__getitem__(self.iterInstantNum-1) | 67 return self.getIthValue(self.iterInstantNum-1) |
| 68 | 68 |
| 69 def getTimeInterval(self): | 69 def getTimeInterval(self): |
| 70 return self.timeInterval | 70 return self.timeInterval |
| 71 | 71 |
| 72 def getValues(self): | 72 def getValues(self): |
| 73 return self.values.values() | 73 return [self.__getitem__(t) for t in self.timeInterval] |
| 74 | 74 |
| 75 def getAngleValues(self): | 75 def getAngleValues(self): |
| 76 '''if the indicator is a function of an angle, | 76 '''if the indicator is a function of an angle, |
| 77 transform it to an angle (eg cos) | 77 transform it to an angle (eg cos) |
| 78 (no transformation otherwise)''' | 78 (no transformation otherwise)''' |
| 96 | 96 |
| 97 def computeDLCSS(indicator1, indicator2, threshold, delta = float('inf'), method= 'min'): | 97 def computeDLCSS(indicator1, indicator2, threshold, delta = float('inf'), method= 'min'): |
| 98 ''' compute the distance between two indicators using LCSS | 98 ''' compute the distance between two indicators using LCSS |
| 99 two common methods are used: min or mean of the indicators length''' | 99 two common methods are used: min or mean of the indicators length''' |
| 100 from utils import LCSS | 100 from utils import LCSS |
| 101 lcss = LCSS(indicator1, indicator2, threshold, lambda x,y:abs(x-y), delta) | 101 |
| 102 def distance(x, y): # lambda x,y:abs(x-y) | |
| 103 if x == None or y == None: | |
| 104 return float('inf') | |
| 105 else: | |
| 106 return abs(x-y) | |
| 107 | |
| 108 lcss = LCSS(indicator1.getValues(), indicator2.getValues(), threshold, distance, delta) | |
| 102 if method == 'min': | 109 if method == 'min': |
| 103 denominator = min(len(indicator1), len(indicator2)) | 110 denominator = min(len(indicator1), len(indicator2)) |
| 104 elif method == 'mean': | 111 elif method == 'mean': |
| 105 denominator = float(len(indicator1) + len(indicator2))/2 | 112 denominator = float(len(indicator1) + len(indicator2))/2 |
| 106 else: | 113 else: |
