我正在尝试通过对每一行执行(X - means) / variance
来规范化矩阵。
由于我使用MapReduce
实现此功能,因此我首先计算每列的均值和标准差异,然后map
每行计算:
matrix.map(lambda X: (X - means) / variance)
但我想忽略每行X
中的第一个元素,这是我的目标列,只包含1和0。
我该怎么做?
答案 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通常除以标准差而不是方差。