Mercurial > hg > nsaunier > traffic-intelligence
comparison python/utils.py @ 389:6d26dcc7bba0
modifications to compute alignment for None indicators
| author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
|---|---|
| date | Thu, 25 Jul 2013 16:01:12 -0400 |
| parents | 387cc0142211 |
| children | 03dbecd3a887 |
comparison
equal
deleted
inserted
replaced
| 388:6e0dedd34920 | 389:6d26dcc7bba0 |
|---|---|
| 217 def __init__(self, similarityFunc, delta = float('inf'), aligned = False, lengthFunc = min): | 217 def __init__(self, similarityFunc, delta = float('inf'), aligned = False, lengthFunc = min): |
| 218 self.similarityFunc = similarityFunc | 218 self.similarityFunc = similarityFunc |
| 219 self.aligned = aligned | 219 self.aligned = aligned |
| 220 self.delta = delta | 220 self.delta = delta |
| 221 self.lengthFunc = lengthFunc | 221 self.lengthFunc = lengthFunc |
| 222 self.alignmentShift = 0 | 222 self.subSequenceIndices = [(0,0)] |
| 223 | 223 |
| 224 def similarities(self, l1, l2, jshift=0): | 224 def similarities(self, l1, l2, jshift=0): |
| 225 from numpy import zeros, int as npint | 225 from numpy import zeros, int as npint |
| 226 n1 = len(l1) | 226 n1 = len(l1) |
| 227 n2 = len(l2) | 227 n2 = len(l2) |
| 271 for i in xrange(-n2-self.delta+1, n1+self.delta): # interval such that [i-shift-delta, i-shift+delta] is never empty, which happens when i-shift+delta < 1 or when i-shift-delta > n2 | 271 for i in xrange(-n2-self.delta+1, n1+self.delta): # interval such that [i-shift-delta, i-shift+delta] is never empty, which happens when i-shift+delta < 1 or when i-shift-delta > n2 |
| 272 self.similarities(l1, l2, i) | 272 self.similarities(l1, l2, i) |
| 273 lcssValues[i] = self.similarityTable.max() | 273 lcssValues[i] = self.similarityTable.max() |
| 274 similarityTables[i] = self.similarityTable | 274 similarityTables[i] = self.similarityTable |
| 275 #print self.similarityTable | 275 #print self.similarityTable |
| 276 self.alignmentShift = argMaxDict(lcssValues) # ideally get the medium alignment shift, the one that minimizes distance | 276 alignmentShift = argMaxDict(lcssValues) # ideally get the medium alignment shift, the one that minimizes distance |
| 277 self.similarityTable = similarityTables[self.alignmentShift] | 277 self.similarityTable = similarityTables[alignmentShift] |
| 278 else: | 278 else: |
| 279 self.alignmentShift = 0 | 279 alignmentShift = 0 |
| 280 self.similarities(l1, l2) | 280 self.similarities(l1, l2) |
| 281 | 281 |
| 282 # threshold values for the useful part of the similarity table are n2-n1-delta and n1-n2-delta | 282 # threshold values for the useful part of the similarity table are n2-n1-delta and n1-n2-delta |
| 283 self.similarityTable = self.similarityTable[:min(n1, n2+self.alignmentShift+self.delta)+1, :min(n2, n1-self.alignmentShift+self.delta)+1] | 283 self.similarityTable = self.similarityTable[:min(n1, n2+alignmentShift+self.delta)+1, :min(n2, n1-alignmentShift+self.delta)+1] |
| 284 | 284 |
| 285 if computeSubSequence: | 285 if computeSubSequence: |
| 286 self.subSequenceIndices = self.subSequence(self.similarityTable.shape[0]-1, self.similarityTable.shape[1]-1) | 286 self.subSequenceIndices = self.subSequence(self.similarityTable.shape[0]-1, self.similarityTable.shape[1]-1) |
| 287 if revertIndices: | 287 if revertIndices: |
| 288 self.subSequenceIndices = [(j,i) for i,j in self.subSequenceIndices] | 288 self.subSequenceIndices = [(j,i) for i,j in self.subSequenceIndices] |
