34void compute_wcss(
const Matrix_& data,
const Cluster_ num_centers,
const Float_*
const centers,
const Cluster_*
const clusters, Float_*
const wcss) {
35 const auto nobs = data.num_observations();
36 const auto ndim = data.num_dimensions();
37 std::fill_n(wcss, num_centers, 0);
39 auto work = data.new_extractor(
static_cast<decltype(I(nobs))
>(0), nobs);
40 for (
decltype(I(nobs)) obs = 0; obs < nobs; ++obs) {
41 const auto curdata = work->get_observation();
42 const auto cen = clusters[obs];
44 Float_& curwcss = wcss[cen];
45 for (
decltype(I(ndim)) d = 0; d < ndim; ++d) {
46 const auto curcenter = centers[sanisizer::nd_offset<std::size_t>(d, ndim, cen)];
47 const Float_ delta =
static_cast<Float_
>(curdata[d]) - curcenter;
48 curwcss += delta * delta;