示例#1
0
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))
示例#2
0
    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)
示例#3
0
    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)
示例#4
0
    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
示例#5
0
    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