题目背景
在机器学习中,对数据进行归一化处理是一种常用的技术。
将数据从各种各样分布调整为平均值为
、方差为
的标准分布,在很多情况下都可以有效地加速模型的训练。
问题描述
这里假定需要处理的数据为
个整数
。
这组数据的平均值:
方差:
使用如下函数处理所有数据,得到的 个浮点数 即满足平均值为 且方差为 :
输入格式
从标准输入读入数据。
第一行包含一个整数
,表示待处理的整数个数。
第二行包含空格分隔的
个整数,依次表示
。
输出格式
输出到标准输出。
输出共
行,每行一个浮点数,依次表示按上述方法归一化处理后的数据
。
样例输入
7
-4 293 0 -22 12 654 1000
Data
样例输出
-0.7485510379073613
0.04504284674812264
-0.7378629047806881
-0.7966476369773906
-0.7057985054006686
1.0096468614303775
1.9341703768876082
Data
样例解释
平均值:
方差:标准差:
子任务
全部的测试数据保证
,其中 表示
的绝对值。
且输入的
个整数 满足:方差
。
评分方式
如果你输出的每个浮点数与参考结果相比,均满足绝对误差不大于
,则该测试点满分,否则不得分。
提示
-
C/C++:建议使用
double
类型存储浮点数,并使用printf("%f", x);$$'
进行输出。 -
Python:直接使用
print(x)
进行输出即可。 -
Java:建议使用
double
类型存储浮点数,可以使用System.out.print(x);
进行输出。#include<iostream> #include<cmath> using namespace std; int main() { int n,i,sum=0; double average,d,sum1; int a[1000]; double f[1000],x[1000]; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&a[i]); sum+=a[i]; } average=(double)sum/n; for(i=0;i<n;i++) { x[i]=(a[i]-average)*(a[i]-average); sum1+=x[i]; } d=sum1/n; for(i=0;i<n;i++) { f[i]=(a[i]-average)/sqrt(d); printf("%.16f\n",f[i]); } return 0; }