(2021年12月22日更新)
其实可以直接这样:
zscored_values=(values-np.mean(values))/np.std(values)
因为numpy torch等框架带有“传播”功能。
(以下是原来的文章)
搜了一顿也没有用numpy实现的,都是直接用学习框架实现好的函数。
我把z-score转化成了np的矩阵运算。
def Normalize(raw_list):
np_data=np.array(raw_list)
length=len(raw_list)
#列均值
means=np.mean(np_data,axis=0)
#列标准差
sigmas=np.std(np_data,axis=0)
#z-score转化成矩阵运算
mean_matrix=np.tile(means,(length,1))
sigma_metrix=np.tile(sigmas,(length,1))
np_data=(np_data-mean_matrix)/sigma_matrix
return np_data
拿出其中一个维度验证一下。
before=np.random.normal(loc=5,scale=5,size=1000)
before=np.tile(before.reshape(-1,1),(1,2))
print(before.shape)
after=Normalize(before)
# print(before.shape)
# print(after.shape)
plt.hist(before[:,0])
plt.show()
plt.hist(after[:,0])
plt.show()
行,概率密度函数看上去不变。