#include #include #include #include using VecD = std::vector; double getMean(const VecD& data) { return std::accumulate(data.cbegin(), data.cend(), 0.0) / data.size(); } double getVariance(const VecD& data, double meanVal) { double sum = 0.0; for (double x : data) { sum += std::pow(meanVal - x, 2); } return sum / data.size(); } double getStdDev(const VecD& data, double meanVal) { return sqrt(getVariance(data, meanVal)); } VecD zScoreNormalize(const VecD& data) { double meanVal = getMean(data); double stdDev = getStdDev(data, meanVal); VecD normalizedData(data.size()); for (size_t i = 0; i < data.size(); i++) { normalizedData[i] = (data[i] - meanVal) / stdDev; } return normalizedData; } int main() { VecD v = {50, 60, 70, 80, 90, 600}; auto ans = zScoreNormalize(v); for (double x : ans) { std::cout << x << ' '; } std::cout << std::endl; return 0; }