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