/// <summary>
        /// Calculates a weighted Centroid for a given array of __inputVecType__s
        /// </summary>
        public static __outputVecType__ ComputeCentroid(this __inputVecType__[] vectors, __scalarType__[] weights)
        {
            __outputVecType__ sum       = __outputVecType__.Zero;
            __scalarType__    weightSum = 0;

            for (int i = 0; i < vectors.Length; i++)
            {
                sum       += weights[i] * __cast__vectors[i];
                weightSum += weights[i];
            }

            return(sum / weightSum);
        }
Esempio n. 2
0
        /// <summary>
        /// Calculates a weighted centroid for vectors and weights given by indices.
        /// Sum(vectors[indices[i]] * weights[indices[i]]) / Sum(weights[indices[i]].
        /// </summary>
        public static __outputVecType__ ComputeCentroid(this __inputVecType__[] vectors, __scalarType__[] weights, int[] indices)
        {
            __outputVecType__ sum       = __outputVecType__.Zero;
            __scalarType__    weightSum = 0;

            for (int i = 0; i < indices.Length; i++)
            {
                var w = weights[indices[i]];
                sum       += w * __cast__vectors[indices[i]];
                weightSum += w;
            }

            return(sum / weightSum);
        }