迭代和更改python numpy矩阵列的值

时间:2019-10-10 06:31:19

标签: python numpy

我有一个包含数字的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#列表中),因此允许我通过更改行值来更改矩阵值。
但是我错了,因为矩阵保持其原始值不变。

感谢您的帮助。

2 个答案:

答案 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