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