我有一个包含数字的numpy矩阵。
1,0,1,1
0,1,1,1
0,0,1,0
1,1,1,1
我想对每一列执行Z-Score归一化;z_Scorey =(y- mean (列))/sqrt( var )y是列中的每个元素,mean是均值函数,sqrt平方根函数,var方差。
我的方法如下:
x_trainT = x_train.T #transpose the matrix to iterate over columns
for item in x_trainT:
m = item.mean()
var = np.sqrt(item.var())
item = (item - m)/var
x_train = x_trainT.T
我认为在迭代时,每一行都是通过引用来访问的(例如,在c#列表中),因此允许我通过更改行值来更改矩阵值。
然而,我错了,因为矩阵保持其原始值不变。
非常感谢您的帮助。
发布于 2019-10-10 06:43:34
我建议您在可能的情况下避免迭代。你可以用“列方式”计算平均值和标准差。
>>> import numpy as np
>>> x_train = np.random.random((5, 8))
>>> norm_x_train = (x_train - x_train.mean(axis=0)) / x_train.std(axis=0)
发布于 2019-10-10 06:38:56
您可能必须对行号进行索引:
x_trainT = x_train.T
for i in range(x_trainT.shape[0]):
item = x_trainT[i]
m = item.mean()
sd = np.sqrt(item.var())
x_trainT[i] = (item - m)/sd
x_trainT = x_train.T
https://stackoverflow.com/questions/58316757
复制