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]