我正在尝试确保任意维度矩阵的每一行均值为零。但是我在运行下面的代码时得到IndexError:index 2超出了轴2的大小2的范围。仅在Z的尺寸内迭代值,所以我看不到如何尝试在Z的尺寸外进行索引。
import numpy as np
def center_rows(Z):
"""Ensures each row has zero mean.
Takes a matrix of arbitrary shape and subtracts from each row the mean value of that row."""
Zc = Z
for row in Z:
avg = np.mean(Z[row])
Zc[row] = Z[row] - avg
return Zc
答案 0 :(得分:0)
只是一个想法,但通常您不想在Numpy数组上使用python循环。您可以仅使用Numpy获得0均值的行,理想情况下可以跳过循环
Z - np.mean(Z,axis = 1)[:,None]
我也不是最了解事物的工作方式,但是Zc = Z
可能只是指向同一数组。至少当我测试它时,修改其中一个修改了另一个,所以也许添加了。
Zc = Z.copy()
会有所帮助。
编辑:[:, None]仅向均值数组添加一个额外的维。您可以轻松对其进行测试。
import numpy as np
test = np.array([1,2,3])
test.shape
Out[3]: (3,)
test[:,None].shape
Out[4]: (3, 1)
由于维数相同,您可以直接从数组中减去均值,而无需for循环。