我有一个包含数字的numpy矩阵。
1,0,1,1
0,1,1,1
0,0,1,0
1,1,1,1
我想对每列执行Z分数归一化; z_Score [y] =(y-mean(column))/ 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#列表中),因此允许我通过更改行值来更改矩阵值。
但是我错了,因为矩阵保持其原始值不变。
感谢您的帮助。
答案 0 :(得分:2)
我建议您尽可能避免迭代。您可以按“列明智”的方式计算均值和标准差。
>>> 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)
答案 1 :(得分:1)
您可能必须索引行号:
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