Mercurial Hosting > traffic-intelligence
comparison python/utils.py @ 371:924e38c9f70e
work in progress
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Tue, 16 Jul 2013 01:36:50 -0400 |
parents | 97e8fa0ee9a1 |
children | 349eb1e09f45 |
comparison
equal
deleted
inserted
replaced
370:97e8fa0ee9a1 | 371:924e38c9f70e |
---|---|
249 | 249 |
250 eg distance(p1, p2) < epsilon | 250 eg distance(p1, p2) < epsilon |
251 ''' | 251 ''' |
252 from numpy import argmax | 252 from numpy import argmax |
253 self.similarities(l1, l2) | 253 self.similarities(l1, l2) |
254 imax = argmax(self.similarityTable[:,-1]) | 254 self.similarityTable = self.similarityTable[:, :min(len(l2), len(l1)+self.delta)+1] |
255 jmax = argmax(self.similarityTable[-1,:]) | |
256 if computeSubSequence: | 255 if computeSubSequence: |
257 if self.similarityTable[imax, -1] > self.similarityTable[-1, jmax]: | 256 self.subSequenceIndices = self.subSequence(len(l1), len(l2)) |
258 self.similarityTable = self.similarityTable[:imax+1, :] | 257 return self.similarityTable[-1,-1] |
259 self.subSequenceIndices = self.subSequence(imax, len(l2)) | |
260 else: | |
261 self.similarityTable = self.similarityTable[:, :jmax+1] | |
262 self.subSequenceIndices = self.subSequence(len(l1), jmax) | |
263 return self.similarityTable[-1,-1] | |
264 else: | |
265 return max(self.similarityTable[imax, -1], self.similarityTable[-1, jmax]) | |
266 | 258 |
267 def _compute(self, _l1, _l2, computeSubSequence = False): | 259 def _compute(self, _l1, _l2, computeSubSequence = False): |
268 '''returns the best matching if using a finite delta by shiftinig the series alignments''' | 260 '''returns the best matching if using a finite delta by shiftinig the series alignments''' |
269 if self.aligned: | 261 if self.aligned: |
270 from numpy import argmax | 262 from numpy import argmax |
271 if len(_l2) < len(_l1): # l1 is the shortest | 263 if len(_l2) < len(_l1): # l1 is the shortest |
272 l1 = _l2 | 264 l1 = _l2 |
273 l2 = _l1 | 265 l2 = _l1 |
266 revertIndices = True | |
274 else: | 267 else: |
275 l1 = _l1 | 268 l1 = _l1 |
276 l2 = _l2 | 269 l2 = _l2 |
270 revertIndices = False | |
277 n1 = len(l1) | 271 n1 = len(l1) |
278 n2 = len(l2) | 272 n2 = len(l2) |
279 # for i in xrange(min(delta,n1), max(n1+n2-delta, n2+1)): # i is the alignment of the end of l1 in l2 | 273 # for i in xrange(min(delta,n1), max(n1+n2-delta, n2+1)): # i is the alignment of the end of l1 in l2 |
280 # print l1[min(-i-1,n1):] # min(n1+n2-i,n1) | 274 # print l1[min(-i-1,n1):] # min(n1+n2-i,n1) |
281 # print l2[max(0,i-n1):] | 275 # print l2[max(0,i-n1):] |
282 # print LCSS(l1[min(-i-1,n1):], l2[max(0,i-n1):], similarityFunc, delta) | 276 # print LCSS(l1[min(-i-1,n1):], l2[max(0,i-n1):], similarityFunc, delta) |
283 lcssValues = {} | 277 lcssValues = {} |
284 similarityTables = {} | 278 similarityTables = {} |
285 for i in xrange(min(self.delta,n1), max(n1+n2-self.delta, n2+1), max(1,self.delta)): | 279 for i in xrange(min(self.delta,n1), max(n1+n2-self.delta, n2+1)): |
286 print l1[min(-i-1,n1):] # min(n1+n2-i,n1) | 280 #print l1[min(-i-1,n1):] # min(n1+n2-i,n1) |
287 print l2[max(0,i-n1):] | 281 #print l2[max(0,i-n1):] |
288 lcssValues[i] = self.computeLCSS(l1[min(-i-1,n1):], l2[max(0,i-n1):]) | 282 lcssValues[i] = self.computeLCSS(l1[min(-i-1,n1):], l2[max(0,i-n1):]) |
289 print i, lcssValues[i] | 283 #print i, lcssValues[i] |
290 similarityTables[i] = self.similarityTable | 284 similarityTables[i] = self.similarityTable |
291 imax = argMaxDict(lcssValues) | 285 imax = argMaxDict(lcssValues) |
292 self.similarityTable = similarityTables[imax] | 286 self.similarityTable = similarityTables[imax] |
293 self.subSequenceIndices = self.subSequence(self.similarityTable.shape[0]-1, self.similarityTable.shape[1]-1) | 287 self.subSequenceIndices = self.subSequence(self.similarityTable.shape[0]-1, self.similarityTable.shape[1]-1) |
294 self.alignmentShift = max(0,imax-n1)-min(-imax-1,n1) | 288 if revertIndices: |
289 self.subSequenceIndices = [(j+imax-n1,i) for i,j in self.subSequenceIndices] | |
290 self.alignmentShift = imax-n1 | |
291 else: | |
292 self.subSequenceIndices = [(i+n1-imax,j) for i,j in self.subSequenceIndices] | |
293 self.alignmentShift = n1-imax | |
295 return lcssValues[imax] | 294 return lcssValues[imax] |
296 else: | 295 else: |
297 return self.computeLCSS(_l1, _l2, computeSubSequence) | 296 return self.computeLCSS(_l1, _l2, computeSubSequence) |
298 | 297 |
299 def compute(self, l1, l2, computeSubSequence = False): | 298 def compute(self, l1, l2, computeSubSequence = False): |