如何創建一個函式,回圈遍歷 numpy 矩陣以 z 縮放每個資料點,回傳標準化的資料。就像 sklearn.preprocessing.StandardScaler 是如何做到的。我已經到了這里,但沒有成功。有人可以幫我嗎?
def stand_scaler(data):
mean = np.mean(data, axis=0)
std = np.std(data, axis=0)
for i in range(len(data)):
data[i] = (data[i] - mean)/std
return data
stand_scaler(data)
uj5u.com熱心網友回復:
您不應該為此需要 for 回圈;numpy 的陣列操作正是針對這種情況。對于一維陣列,它很簡單:
In [1]: import numpy as np
In [2]: x = np.random.normal(size=10)
In [3]: nx = (x - x.mean()) / x.std()
In [4]: x
Out[4]:
array([ 0.52700345, -0.57358563, -0.16925383, 2.14401554, 1.05223331,
0.72659482, 1.06816826, 0.31194848, 0.04004589, 1.09046925])
In [5]: nx
Out[5]:
array([-0.12859083, -1.62209992, -1.0734181 , 2.06570881, 0.58415071,
0.14225641, 0.60577458, -0.42042233, -0.78939654, 0.63603721])
In [6]: nx.mean()
Out[6]: 5.551115123125783e-17
In [7]: nx.std()
Out[7]: 1.0000000000000002
對于更高的維度,您可以選擇要處理的軸,并使用 numpy 的廣播進行縮放;例如,在這種情況下,想象每一列是一個不同的變數:
In [8]: y = np.array([10,1]) * np.random.normal(size=(5,2)) - np.array([5,-10])
In [9]: ny = (y - y.mean(axis=0)) / y.std(axis=0)
In [10]: ny
Out[10]:
array([[ 0.78076062, -0.26971997],
[-1.59591909, -1.2409338 ],
[-0.55740483, -0.81901609],
[ 1.22978416, 1.12697814],
[ 0.14277914, 1.20269171]])
In [11]: ny.mean(axis=0), ny.std(axis=0)
Out[11]: (array([-3.33066907e-17, 8.43769499e-16]), array([1., 1.]))
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/355853.html
上一篇:找到給定距離的點的坐標
