题目背景:
在机器学习中,对数据进行归一化处理是一种常用的技术。
将数据从各种各样分布调整为平均值为 0 、方差为 1 的标准分布,在很多情况下都可以有效地加速模型的训练。
问题描述:
输入格式:
输出格式:
样例输入:
7
-4 293 0 -22 12 654 1000
样例输出:
-0.7485510379073613
0.04504284674812264
-0.7378629047806881
-0.7966476369773906
-0.7057985054006686
1.0096468614303775
1.9341703768876082
样例解释:
子任务:
注意:
求均值时需要对数据类型进行转换,否则容易丢失精度。
我的代码:
#include <iostream>
#include <vector>
#include <math.h>
using namespace std;
int main()
{
int n; //待处理整数个数n
cin>>n;
vector<int> a(n); //需要处理的数据
double sum = 0;//所有数据的和(求均值)
for(int i = 0;i < n;i++){
cin>>a[i];
sum += a[i];
}
double ave = sum / (double)n; //求出均值
//printf("%.10lf\n", ave);
double dsum = 0; //求方差所需的和
for(int i = 0;i < n;i++){
dsum += (a[i] - ave) * (a[i] - ave);
}
double d = dsum / n; //求方差
//printf("%.10lf\n", d);
for(int i = 0;i < n;i++){//函数处理:归一化
double x = (a[i] - ave) / sqrt(d);
printf("%.10lf\n", x);//$$;
}
return 0;
}
/**
7
-4 293 0 -22 12 654 1000
*/
运行结果:
提交: