Python IndexError遍历数组

时间:2019-02-04 16:45:26

标签: python

我正在尝试确保任意维度矩阵的每一行均值为零。但是我在运行下面的代码时得到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

1 个答案:

答案 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循环。