/// <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); }
/// <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); }