@@ -73,23 +73,6 @@ function kmeans!(alg::Hamerly, containers, X, k;
7373 return KmeansResult (centroids, containers. labels, Float64[], Int[], Float64[], totalcost, niters, converged)
7474end
7575
76-
77- function collect_containers (alg:: Hamerly , containers, n_threads)
78- if n_threads == 1
79- @inbounds containers. centroids_new[end ] .= containers. centroids_new[1 ] ./ containers. centroids_cnt[1 ]'
80- else
81- @inbounds containers. centroids_new[end ] .= containers. centroids_new[1 ]
82- @inbounds containers. centroids_cnt[end ] .= containers. centroids_cnt[1 ]
83- @inbounds for i in 2 : n_threads
84- containers. centroids_new[end ] .+ = containers. centroids_new[i]
85- containers. centroids_cnt[end ] .+ = containers. centroids_cnt[i]
86- end
87-
88- @inbounds containers. centroids_new[end ] .= containers. centroids_new[end ] ./ containers. centroids_cnt[end ]'
89- end
90- end
91-
92-
9376function create_containers (alg:: Hamerly , k, nrow, ncol, n_threads)
9477 lng = n_threads + 1
9578 centroids_new = Vector {Array{Float64,2}} (undef, lng)
@@ -108,7 +91,7 @@ function create_containers(alg::Hamerly, k, nrow, ncol, n_threads)
10891
10992 labels = zeros (Int, ncol)
11093
111- # distance that centroid moved
94+ # distance that centroid has moved
11295 p = Vector {Float64} (undef, k)
11396
11497 # distance from the center to the closest other center
@@ -289,9 +272,9 @@ function chunk_update_bounds(alg::Hamerly, containers, r1, r2, pr1, pr2, r, idx)
289272 label = labels[i]
290273 ub[i] += 2 * sqrt (abs (ub[i] * p[label])) + p[label]
291274 if r1 == label
292- lb[i] += pr2 - 2 * sqrt (abs (pr2* lb[i]))
275+ lb[i] = lb[i] <= pr2 ? 0.0 : lb[i] + pr2 - 2 * sqrt (abs (pr2* lb[i]))
293276 else
294- lb[i] += pr1 - 2 * sqrt (abs (pr1* lb[i]))
277+ lb[i] = lb[i] <= pr1 ? 0.0 : lb[i] + pr1 - 2 * sqrt (abs (pr1* lb[i]))
295278 end
296279 end
297280end
0 commit comments