def perform_promotion(w1_in,w2_in,w1_out,w2_out): """ Takes 2 isax sequences and promotes each symbol to the higher cardinality :return: """ for x in xrange(len(w1_in.symbols)): a = sy.Symbol() b = sy.Symbol() sy.perform_promotion(w1_in.symbols[x],w2_in.symbols[x],a,b) w1_out.symbols.append(a) w2_out.symbols.append(b)
def sax_distance(self,other): """ Calculates SAX euclidean distance between two iSAX sequences. :param other: :return: """ alphabet = alpha.NormalAlphabet() sqd_dist = 0 # Compare symbol by symbol for x in xrange(len(self.symbols)): a = sy.Symbol() b = sy.Symbol() sy.perform_promotion(self.symbols[x],other.symbols[x],a,b) distance_matrix = np.array([[0],[0]]) distance_matrix = alphabet.get_distance_matrix(a.cardinality) local_dist = distance_matrix[a.sax_character][b.sax_character] sqd_dist += local_dist return sqd_dist
def mind_dist(self,other): alphabet = alpha.NormalAlphabet() sqd_dist = 0 for x in xrange(len(self.symbols)): a = sy.Symbol() b = sy.Symbol() sy.perform_promotion(self.symbols[x],other.symbols[x],a,b) distance_matrix = alphabet.get_distance_matrix(a.cardinality) local_dist = distance_matrix[a.sax_character][b.sax_character] sqd_dist += local_dist * local_dist # get the sq root of the sum of the squares dist_sqrt = math.sqrt(sqd_dist) # Calculate the coefficient original_ts_length = self.orig_length * 1.0 derived_sax_length = len(self.symbols) coef = math.sqrt(original_ts_length/derived_sax_length) return dist_sqrt * coef
def test_promote_symbol(self): A_in = sy.Symbol(0, 2) B_in = sy.Symbol(1, 2) A_out = sy.Symbol(0, 0) B_out = sy.Symbol(0, 0) sy.perform_promotion(A_in, B_in, A_out, B_out) self.assertEquals(A_out.cardinality, 2) self.assertEquals(B_out.cardinality, 2) self.assertEquals(A_out.sax_character,0) self.assertEquals(B_out.sax_character,1) A_in = sy.Symbol(6, 8) B_in = sy.Symbol(0, 2) A_out = sy.Symbol(0, 0) B_out = sy.Symbol(0, 0) sy.perform_promotion(A_in, B_in, A_out, B_out) self.assertEquals(B_out.cardinality, 8) self.assertEquals(A_out.sax_character, 6) self.assertEquals(B_out.sax_character, 3) A_in = sy.Symbol(1, 2) B_in = sy.Symbol(3, 8) A_out = sy.Symbol(0, 0) B_out = sy.Symbol(0, 0) sy.perform_promotion(A_in, B_in, A_out, B_out) self.assertEquals(A_out.cardinality, 8) self.assertEquals(B_out.cardinality, 8) self.assertEquals(A_out.sax_character, 4) self.assertEquals(B_out.sax_character, 3) A_in = sy.Symbol(1, 2) B_in = sy.Symbol(0, 8) A_out = sy.Symbol(0, 0) B_out = sy.Symbol(0, 0) sy.perform_promotion(A_in, B_in, A_out, B_out) self.assertEquals(A_out.cardinality, 8) self.assertEquals(B_out.cardinality, 8) self.assertEquals(A_out.sax_character, 4) self.assertEquals(B_out.sax_character, 0)