試題編號:202206-1試題名稱:歸一化處理時間限制:500ms內存限制:512.0MB問題描述:想查看其他題的真題及題解的同學可以前往查看:CCF-CSP真題附題解大全
在機器學習中,對數據進行歸一化處理是一種常用的技術。
將數據從各種各樣分布調整為平均值為 0、方差為 1 的標准分布,在很多情況下都可以有效地加速模型的訓練。
這裡假定需要處理的數據為 n 個整數 a1,a2,⋯,an。
這組數據的平均值:
a¯=a1+a2+⋯+ann
方差:
D(a)=1n∑i=1n(ai−a¯)2
使用如下函數處理所有數據,得到的 n 個浮點數 f(a1),f(a2),⋯,f(an) 即滿足平均值為 0 且方差為 1:
f(ai)=ai−a¯D(a)
從標准輸入讀入數據。
第一行包含一個整數 n,表示待處理的整數個數。
第二行包含空格分隔的 n 個整數,依次表示 a1,a2,⋯,an。
輸出到標准輸出。
輸出共 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
方差:D(a)≈140060.69387755104
標准差:D(a)≈374.24683549437134
全部的測試數據保證 n,|ai|≤1000,其中 |ai| 表示 ai 的絕對值。
且輸入的 n 個整數 a1,a2,⋯,an 滿足:方差 D(a)≥1。
如果你輸出的每個浮點數與參考結果相比,均滿足絕對誤差不大於 10−4,則該測試點滿分,否則不得分。
C/C++:建議使用 double
類型存儲浮點數,並使用 printf("%f", x);$$'
進行輸出。
Python:直接使用 print(x)
進行輸出即可。
Java:建議使用 double
類型存儲浮點數,可以使用 System.out.print(x);
進行輸出。
真題來源:歸一化處理
感興趣的同學可以進去進行練習提交
滿分題解:
n = int(input())
nums = list(map(int,input().split()))
a = sum(nums)/n
d = 0
for i in range(n):
d += (nums[i]-a)**2
d /= n
data = []
for i in range(n):
point = (nums[i]-a)/(d**0.5)
data.append(point)
for i in data:
print(i)
運行結果:
ccf-csp練習專欄
https://blog.csdn.net/weixin_53919192/category_11828479.html?spm=1001.2014.3001.5482https://blog.csdn.net/weixin_53919192/category_11828479.html?spm=1001.2014.3001.5482