@@ 221-247 (lines=27) @@ | ||
218 | raise TypeError("Unknown type of data is specified '%s'" % self.__data_type) |
|
219 | ||
220 | ||
221 | def __update_clusters(self): |
|
222 | """! |
|
223 | @brief Calculate distance to each point from the each cluster. |
|
224 | @details Nearest points are captured by according clusters and as a result clusters are updated. |
|
225 | ||
226 | @return (list) updated clusters as list of clusters where each cluster contains indexes of objects from data. |
|
227 | ||
228 | """ |
|
229 | ||
230 | clusters = [[self.__medoid_indexes[i]] for i in range(len(self.__medoid_indexes))] |
|
231 | for index_point in range(len(self.__pointer_data)): |
|
232 | if index_point in self.__medoid_indexes: |
|
233 | continue |
|
234 | ||
235 | index_optim = -1 |
|
236 | dist_optim = float('Inf') |
|
237 | ||
238 | for index in range(len(self.__medoid_indexes)): |
|
239 | dist = self.__distance_calculator(index_point, self.__medoid_indexes[index]) |
|
240 | ||
241 | if dist < dist_optim: |
|
242 | index_optim = index |
|
243 | dist_optim = dist |
|
244 | ||
245 | clusters[index_optim].append(index_point) |
|
246 | ||
247 | return clusters |
|
248 | ||
249 | ||
250 | def __update_medoids(self): |
@@ 160-186 (lines=27) @@ | ||
157 | return type_encoding.CLUSTER_INDEX_LIST_SEPARATION |
|
158 | ||
159 | ||
160 | def __update_clusters(self): |
|
161 | """! |
|
162 | @brief Calculate Manhattan distance to each point from the each cluster. |
|
163 | @details Nearest points are captured by according clusters and as a result clusters are updated. |
|
164 | ||
165 | @return (list) updated clusters as list of clusters where each cluster contains indexes of objects from data. |
|
166 | ||
167 | """ |
|
168 | ||
169 | clusters = [[] for i in range(len(self.__medians))] |
|
170 | for index_point in range(len(self.__pointer_data)): |
|
171 | index_optim = -1 |
|
172 | dist_optim = 0.0 |
|
173 | ||
174 | for index in range(len(self.__medians)): |
|
175 | dist = self.__metric(self.__pointer_data[index_point], self.__medians[index]) |
|
176 | ||
177 | if (dist < dist_optim) or (index is 0): |
|
178 | index_optim = index |
|
179 | dist_optim = dist |
|
180 | ||
181 | clusters[index_optim].append(index_point) |
|
182 | ||
183 | # If cluster is not able to capture object it should be removed |
|
184 | clusters = [cluster for cluster in clusters if len(cluster) > 0] |
|
185 | ||
186 | return clusters |
|
187 | ||
188 | ||
189 | def __update_medians(self): |