Code Duplication    Length = 29-31 lines in 2 locations

pyclustering/cluster/kmedians.py 1 location

@@ 90-120 (lines=31) @@
87
            self.__ccore = ccore_library.workable()
88
89
90
    def process(self):
91
        """!
92
        @brief Performs cluster analysis in line with rules of K-Medians algorithm.
93
        
94
        @remark Results of clustering can be obtained using corresponding get methods.
95
        
96
        @see get_clusters()
97
        @see get_medians()
98
        
99
        """
100
        
101
        if self.__ccore is True:
102
            ccore_metric = metric_wrapper.create_instance(self.__metric)
103
104
            self.__clusters = wrapper.kmedians(self.__pointer_data, self.__medians, self.__tolerance, ccore_metric.get_pointer())
105
            self.__medians = self.__update_medians()
106
            
107
        else:
108
            changes = float('inf')
109
             
110
            # Check for dimension
111
            if len(self.__pointer_data[0]) != len(self.__medians[0]):
112
                raise NameError('Dimension of the input data and dimension of the initial medians must be equal.')
113
             
114
            while changes > self.__tolerance:
115
                self.__clusters = self.__update_clusters()
116
                updated_centers = self.__update_medians()
117
             
118
                changes = max([self.__metric(self.__medians[index], updated_centers[index]) for index in range(len(updated_centers))])
119
                 
120
                self.__medians = updated_centers
121
122
123
    def get_clusters(self):

pyclustering/cluster/kmedoids.py 1 location

@@ 133-161 (lines=29) @@
130
            self.__ccore = ccore_library.workable()
131
132
133
    def process(self):
134
        """!
135
        @brief Performs cluster analysis in line with rules of K-Medoids algorithm.
136
        
137
        @remark Results of clustering can be obtained using corresponding get methods.
138
        
139
        @see get_clusters()
140
        @see get_medoids()
141
        
142
        """
143
        
144
        if self.__ccore is True:
145
            ccore_metric = metric_wrapper.create_instance(self.__metric)
146
147
            self.__clusters = wrapper.kmedoids(self.__pointer_data, self.__medoid_indexes, self.__tolerance, ccore_metric.get_pointer(), self.__data_type)
148
            self.__medoid_indexes = self.__update_medoids()
149
        
150
        else:
151
            changes = float('inf')
152
             
153
            stop_condition = self.__tolerance
154
             
155
            while changes > stop_condition:
156
                self.__clusters = self.__update_clusters()
157
                update_medoid_indexes = self.__update_medoids()
158
159
                changes = max([self.__distance_calculator(self.__medoid_indexes[index], update_medoid_indexes[index]) for index in range(len(update_medoid_indexes))])
160
161
                self.__medoid_indexes = update_medoid_indexes
162
163
164
    def get_clusters(self):