Mercurial Hosting > 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: |