CCF-CSP 202206-1 归一化处理

😸题目要求

🐈‍⬛题目背景

在机器学习中,对数据进行归一化处理是一种常用的技术。
将数据从各种各样分布调整为平均值为 0、方差为 1 的标准分布,在很多情况下都可以有效地加速模型的训练。

🐈‍⬛问题描述

这里假定需要处理的数据为 n n n 个整数 a 1 , a 2 , ⋅ ⋅ ⋅ , a n a_1,a_2,···,a_n a1,a2,⋅⋅⋅,an

这组数据的平均值:

a ˉ = a 1 + a 2 + ⋅ ⋅ ⋅ + a n n \bar{a}=\frac{a_1+a_2+···+a_n}{n} aˉ=na1+a2+⋅⋅⋅+an

方差:

D ( a ) = 1 n ∑ i = 1 n ( a i − a ) 2 D(a)=\frac{1}{n} \displaystyle\sum_{i=1}^n{({a_i}-a)}^2 D(a)=n1i=1n(aia)2

使用如下函数处理所有数据,得到的 n n n 个浮点数 f ( a 1 ) , f ( a 2 ) , ⋅ ⋅ ⋅ , f ( a n ) f(a_1),f(a_2),···,f(a_n) f(a1),f(a2),⋅⋅⋅,f(an) 即满足平均值为 0 且方差为 1:

f ( a i ) = a i − a ˉ D ( a ) f(a_i)=\frac{a_i-\bar{a}}{\sqrt{D(a)}} f(ai)=D(a) aiaˉ

🐈‍⬛输入格式

从标准输入读入数据。

第一行包含一个整数 n n n,表示待处理的整数个数。

第二行包含空格分隔的 n n n 个整数,依次表示 a 1 , a 2 , ⋅ ⋅ ⋅ , a n a_1,a_2,···,a_n a1,a2,⋅⋅⋅,an

🐈‍⬛输出格式

输出到标准输出。

输出共 n n n 行,每行一个浮点数,依次表示按上述方法归一化处理后的数据 f ( a 1 ) , f ( a 2 ) , ⋅ ⋅ ⋅ , f ( a n ) f(a_1),f(a_2),···,f(a_n) f(a1),f(a2),⋅⋅⋅,f(an)

🐈‍⬛样例说明

🎶样例输入

7
-4 293 0 -22 12 654 1000

🎶样例输出

-0.7485510379073613
0.04504284674812264
-0.7378629047806881
-0.7966476369773906
-0.7057985054006686
1.0096468614303775
1.9341703768876082

🎶样例解释

平均值: a ˉ ≈ 276.14285714285717 \bar{a}\approx 276.14285714285717 aˉ276.14285714285717

方差: D ( a ) ≈ 140060.69387755104 D(a)\approx 140060.69387755104 D(a)140060.69387755104

标准差: D ( a ) ≈ 374.24683549437134 \sqrt{D(a)}\approx 374.24683549437134 D(a) 374.24683549437134

🐈‍⬛子任务

全部的测试数据保证 n , ∣ a i ∣ ≤ 1000 n,|a_i| \leq 1000 n,ai1000,其中 ∣ a i ∣ |a_i| ai 表示 a i a_i ai 的绝对值。

且输入的 n n n 个整数 a 1 , a 2 , ⋅ ⋅ ⋅ , a n a_1,a_2,···,a_n a1,a2,⋅⋅⋅,an 满足:方差 D ( a ) ≥ 1 D(a) \geq 1 D(a)1

🐈‍⬛评分方式

如果你输出的每个浮点数与参考结果相比,均满足绝对误差不大于 1 0 − 4 10^{-4} 104,则该测试点满分,否则不得分。

🐈‍⬛提示

  • C/C++:建议使用 double 类型存储浮点数,并使用 printf("%f", x);$$' 进行输出。
  • Python:直接使用 print(x) 进行输出即可。
  • Java:建议使用 double 类型存储浮点数,可以使用 System.out.print(x); 进行输出。

😸问题解决

🐈满分代码(含逐行代码解释)

🍭C++

#include<bits/stdc++.h>
using namespace std;

int main(){
   
	//输入 
	int n;
	cin >> n;
	vector<int>a(10001); //动态数组a[i],输入的都是整数 
	for(int i = 0; i < n; i++){
   
		cin >> a[i];	
	}
	//前置公式计算(求和、方差) 
	double sum = 0; //和
	for(int i = 0; i < n; i++){
   
		sum += a[i]; //求和的计算公式 
	}
	double D = 0; //方差
	for(int i = 0; i < n; i++){
   
		D += (a[i] - sum / n) * (a[i] - sum / n); //求方差的计算公式 
	}
	//归一化计算
	vector<double>f(10001); //动态数组f[i],输出的都是浮点数 
	for(int i = 0; i < n; i++){
   
		f[i] = (a[i] - sum / n) / (sqrt(D / n)); //归一化计算公式 
	} 
	//输出
	for(int i = 0; i < n; i++){
   
		cout << fixed << setprecision(16) << f[i] << endl; //固定保留16位小数 
	} 
	return 0; 
}

🐈场景拓展

上述代码主要实现了一组数据的归一化处理。归一化是一种数据预处理方法,目的是将原始数据变换到同一量度标准下,常用于机器学习、数据分析、统计学等领域中。本题需要学会的考点是求和、求方差的计算方法以及归一化的运算过程,这种处理在数据预处理中及其常见,同时要注意双精度变量的定义。

相关推荐

  1. CCF-CSP 202206-1 处理

    2024-02-02 13:24:01       29 阅读
  2. CCF-CSP 202209-1 如此编码

    2024-02-02 13:24:01       32 阅读
  3. ccf 202203-1 未初始化警告

    2024-02-02 13:24:01       18 阅读
  4. CCF-CSP 202206-2 寻宝!大冒险!

    2024-02-02 13:24:01       28 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-02 13:24:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-02 13:24:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-02 13:24:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-02 13:24:01       20 阅读

热门阅读

  1. IDEA常用快捷健

    2024-02-02 13:24:01       26 阅读
  2. 点亮第一个LED实验

    2024-02-02 13:24:01       35 阅读
  3. 【极简】Pytorch中的register_buffer()

    2024-02-02 13:24:01       31 阅读
  4. MySQL运维实战(5.4) MySQL元数据乱码

    2024-02-02 13:24:01       39 阅读
  5. 【springBoot】统一功能处理

    2024-02-02 13:24:01       32 阅读
  6. InDesign Server-功能介绍-IDML 文件-ID插件

    2024-02-02 13:24:01       28 阅读
  7. 第7章 网络管理

    2024-02-02 13:24:01       29 阅读
  8. ArcGIS Pro字段编号相关代码

    2024-02-02 13:24:01       32 阅读
  9. 第39章 补充定义7 仿射空间解释投影矩阵

    2024-02-02 13:24:01       28 阅读
  10. Python入门指北十七

    2024-02-02 13:24:01       32 阅读