题目背景
在机器学习中,对数据进行归一化处理是一种常用的技术。
将数据从各种各样分布调整为平均值为、方差为
的标准分布,在很多情况下都可以有效的加速模型的训练。
问题描述
这里假定需要处理的数据为个整数
这组数据的平均值:
方差:
使用如下函数处理所有数据,得到的个浮点数
即满足平均值为
且方差为
:
输入格式
从标准输入读入数据
第一行包含一个整数,表示待处理的整数个数
第二行包含空格分隔的个整数,依次表示
输出格式
输出到标准输出
输出共行,每行一个浮点数,依次表示按上述方法归一化处理后的数据
样例输入
7
-4 293 0 -22 12 654 1000
样例输出
-0.7485510379073613
0.04504284674812264
-0.7378629047806881
-0.7966476369773906
-0.7057985054006686
1.0096468614303775
1.9341703768876082
样例解释
平均值:
方差:
标准差:
子任务
全部的测试数据保证,其中
表示
的绝对值
且输入的个整数
满足:方差
求解
#include <stdio.h>
#include <math.h>
int main() {
int n;
scanf("%d\n", &n);
double value[n];
double average = 0;
int i;
for (i = 0; i < n; i++) {
scanf("%lf", &value[i]);
average += value[i];
}
average /= n;
double variance = 0;
for (i = 0; i < n; i++) {
variance += pow(value[i] - average, 2);
}
variance /= (double)n;
double standard_deviation = sqrt(variance);
for (i = 0; i < n; i++) {
double result;
result = (value[i] - average) / standard_deviation;
printf("%lf\n", result);
}
return 0;
}