如何将一列和一个矩阵组合成一个带有“numpy”的较大矩阵?

时间:2012-12-24 08:15:47

标签: python numpy

我正在尝试通过对每一行执行(X - means) / variance来规范化矩阵。

由于我使用MapReduce实现此功能,因此我首先计算每列的均值和标准差异,然后map每行计算:

   matrix.map(lambda X: (X - means) / variance)

但我想忽略每行X中的第一个元素,这是我的目标列,只包含1和0。

我该怎么做?

1 个答案:

答案 0 :(得分:2)

如果A是一个形状为(m, n + 1)的numpy数组,并且您还拥有形状mu的数组s2(n,),其中包含每个数字的均值和方差除第一个列之外的列,您可以按如下方式进行标准化:

A[:, 1:] = (A[:, 1:] - mu) / s2

要解决观察问题,您需要了解broadcasting的工作原理。由于A[:, 1:]具有形状(m, n)mu以及s2形状(n,),因此最后两个在其形状前面有1个以匹配第一个的尺寸,因此它们被视为(1, n)数组,并且在算术运算期间,第一行和唯一行中的值广播到所有行。

如果您还没有这样做,可以有效地计算您的meand和方差数组

mu = (A[:, 1:].mean(axis=0)
s2 = A[:, 1:].var(axis=0)

对于差异,您可能希望使用np.std平方来利用ddof参数,请参阅docs

另外,normalization通常除以标准差而不是方差。