/*! \file cluster/c_means.c \brief Cluster library - Means value (C) 2001-2009 by the GRASS Development Team This program is free software under the GNU General Public License (>=v2). Read the file COPYING that comes with GRASS for details. \author Original author CERL */ #include #include /*! \brief Calculate means value \param C pointer to Cluster structure \return 0 */ int I_cluster_means(struct Cluster *C) { int band; int class; double m, v; /* m=mean, v=variance then std dev */ double s; G_debug(3, "I_cluster_means(nbands=%d,nclasses=%d)", C->nbands, C->nclasses); for (band = 0; band < C->nbands; band++) { s = C->band_sum[band]; m = s / C->npoints; v = C->band_sum2[band] - s * m; v = sqrt(v / (C->npoints - 1)); for (class = 0; class < C->nclasses; class++) C->mean[band][class] = m; if (C->nclasses > 1) for (class = 0; class < C->nclasses; class++) C->mean[band][class] += ((2.0 * class) / (C->nclasses - 1) - 1.0) * v; } return 0; }