def main(): abstract_dissimilarity = CityBlock() vector1 = [ 7876206.000000, 2.721705, 2.482324, 510.317183, 1310.820459, 907.367521, 594.858896 ] vector2 = [ 7537091.000000, 3.262750, 3.004038, 518.909965, 1310.309662, 1107.230769, 733.423313 ] vector3 = [ 7421256.000000, 3.462628, 3.211842, 524.057260, 1306.746288, 1179.025641, 786.895706 ] vector4 = [ 7284190.000000, 3.630403, 3.402637, 523.408172, 1303.025129, 1241.683761, 837.233129 ] dense_vector1 = PointsVector(vector1, 1, "") dense_vector2 = PointsVector(vector2, 2, "") dense_vector3 = PointsVector(vector3, 3, "") dense_vector4 = PointsVector(vector4, 4, "") print(abstract_dissimilarity.calculate(dense_vector1, dense_vector2)) print(abstract_dissimilarity.calculate(dense_vector1, dense_vector3)) print(abstract_dissimilarity.calculate(dense_vector1, dense_vector4)) print(abstract_dissimilarity.calculate(dense_vector2, dense_vector3)) print(abstract_dissimilarity.calculate(dense_vector2, dense_vector4)) print(abstract_dissimilarity.calculate(dense_vector3, dense_vector4))
def traverse_aabstrees(self, node1, node2, max_depth): dense_vector1 = PointsVector(node1.moments, "", "") dense_vector2 = PointsVector(node2.moments, "", "") local_value = 0 + self.dissimilarity_function.calculate(dense_vector1, dense_vector2) self.local_similarity.append(local_value) if node1.depth <= max_depth: if node1.child1 is not None and node2.child1 is not None: self.traverse_aabstrees(node1.child1, node2.child1, max_depth) if node1.child2 is not None and node2.child2 is not None: self.traverse_aabstrees(node1.child2, node2.child2, max_depth)
def traverse_quadtrees(self, node1, node2, max_depth): dense_vector1 = PointsVector(node1.moments, "", "") dense_vector2 = PointsVector(node2.moments, "", "") local_value = self.dissimilarity_function.calculate(dense_vector1, dense_vector2) # * node1.weight self.local_similarity.append(local_value) if node1.depth <= max_depth: if node1.topLeftChild is not None and node2.topLeftChild is not None: self.traverse_quadtrees(node1.topLeftChild, node2.topLeftChild, max_depth) if node1.topRightChild is not None and node2.topRightChild is not None: self.traverse_quadtrees(node1.topRightChild, node2.topRightChild, max_depth) if node1.botLeftChild is not None and node2.botLeftChild is not None: self.traverse_quadtrees(node1.botLeftChild, node2.botLeftChild, max_depth) if node1.botRightChild is not None and node2.botRightChild is not None: self.traverse_quadtrees(node1.botRightChild, node2.botRightChild, max_depth)
def load(self, file_name): self.file_name = file_name file = open(file_name, "r") count = 0 index = 1 self.attributes = [] self.labels = [] self.ids = [] self.instances = [] for line in file: count += 1 if count == 1: option = line[-1:] if option == 'Y' or option == 'y': self.class_flag = True else: self.class_flag = False elif count == 2: number_instances = line elif count == 3: number_attributes = line elif count == 4: self.attributes = [x.strip() for x in line.split(';')] else: line_array = [x.strip() for x in line.split(';')] self.labels.append(line_array[0]) self.ids.append(index) if self.class_flag: dense_vector = PointsVector( line_array[1:(len(line_array) - 1)], line_array[0], line_array[-1]) self.instances.append(dense_vector) else: dense_vector = PointsVector(line_array[1:], line_array[0], 1.0) self.instances.append(dense_vector) index += 1
def calculate_dismatrix_matmatrix_point_by_point(self): self.njdismatrix = DistanceMatrix() self.njdismatrix.labels = self.matmatrix.list_labels self.njdismatrix.ids = [] self.njdismatrix.classes = np.ones(len(self.matmatrix.list_matrices)) self.njdismatrix.file_name = "" self.njdismatrix.nr_elements = len(self.matmatrix.list_matrices) self.njdismatrix.max_distance = float("-inf") self.njdismatrix.min_distance = float("inf") self.njdismatrix.matrix = [] self.matmatrix.list_representations = [] min_depth = 10000 for i in range(0, self.njdismatrix.nr_elements -1): row = [0] * (i+1) self.njdismatrix.matrix.append(row) for i in range(0, self.njdismatrix.nr_elements-1): for j in range(0, i + 1): matrix1 = self.matmatrix.list_matrices[i+1] matrix2 = self.matmatrix.list_matrices[j] vector1 = np.ravel(matrix1) vector2 = np.ravel(matrix2) dense_vector1 = PointsVector(vector1, "", "") dense_vector2 = PointsVector(vector2, "", "") value = self.dissimilarity_function.calculate(dense_vector1, dense_vector2) value = round(float(value), 6) if (i + 1) < j: self.njdismatrix.matrix[j - 1][i + 1] = value else: self.njdismatrix.matrix[i][j] = value if value > self.njdismatrix.max_distance and value >= 0.0: self.njdismatrix.max_distance = value if 0.0 <= value < self.njdismatrix.min_distance: self.njdismatrix.min_distance = value