def templateTreeVisualization(self, path, **kwargs): sample = None if path is not None: sample = read_sample(path) exception = kwargs.get('exception', None) if exception is not None: self.assertRaises(exception, kdtree_visualizer, kdtree(sample)) self.assertRaises(exception, kdtree_visualizer, kdtree_balanced(sample)) else: kdtree_visualizer(kdtree(sample)).visualize() kdtree_visualizer(kdtree_balanced(sample)).visualize()
def templateSeachNearestNodeInBalancedTree(self, sample_path, generate_payload=False, **kwargs): numpy_usage = kwargs.get('numpy_usage', False) sample = read_sample(sample_path) if numpy_usage is True: sample = numpy.array(sample) payloads = None if generate_payload is True: payloads = [random.randint(1, 1000) for _ in range(len(sample))] tree = kdtree_balanced(sample, payloads) for i in range(len(sample)): node = tree.find_nearest_dist_node(sample[i], 0.0) self.assertIsNotNone(node) if numpy_usage is False: self.assertIs(node.data, sample[i]) else: self.assertTrue((node.data == sample[i]).all()) if payloads is not None: self.assertEqual(node.payload, payloads[i])
def process(self): """! @brief Performs cluster analysis in line with rules of DBSCAN algorithm. @return (dbscan) Returns itself (DBSCAN instance). @see get_clusters() @see get_noise() """ if self.__ccore is True: (self.__clusters, self.__noise) = wrapper.dbscan(self.__pointer_data, self.__eps, self.__neighbors, self.__data_type) else: if self.__data_type == 'points': self.__kdtree = kdtree_balanced( self.__pointer_data, range(len(self.__pointer_data))) for i in range(0, len(self.__pointer_data)): if self.__visited[i] is False: cluster = self.__expand_cluster(i) if cluster is not None: self.__clusters.append(cluster) for i in range(0, len(self.__pointer_data)): if self.__belong[i] is False: self.__noise.append(i) return self
def __process_by_python(self): """! @brief Performs cluster analysis using python code. """ if self.__data_type == 'points': self.__kdtree = kdtree_balanced(self.__sample_pointer, range(len(self.__sample_pointer))) self.__allocate_clusters() if (self.__amount_clusters is not None) and (self.__amount_clusters != len(self.get_clusters())): analyser = ordering_analyser(self.get_ordering()) radius, _ = analyser.calculate_connvectivity_radius( self.__amount_clusters) if radius is not None: self.__eps = radius self.__allocate_clusters()