我尝试通过对每一行执行(X - 均值)/方差
来标准化矩阵。
由于我使用 MapReduce
实现此功能,因此我首先计算每列的均值和标准方差,然后使用以下方法映射
每一行:
matrix.map(lambda X: (X - means) / variance)
但我想忽略每行中的第一个元素 X
,这是我的目标列,仅包含 1 和 0。
我该怎么做?
最佳答案
如果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)
数组,并且在算术过程中操作的第一行也是唯一一行中的值被广播到所有行。
如果您还没有这样做,您的均值和方差数组可以有效地计算为
mu = (A[:, 1:].mean(axis=0)
s2 = A[:, 1:].var(axis=0)
对于您可能想要使用 np.std
平方来利用 ddof
参数的方差,请参阅 docs .
另外说明,normalization通常除以标准差,而不是方差。
关于python - 如何使用 `numpy` 将一列和一个矩阵组合成一个更大的矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14018855/