Python索引器遍历数组

2024-05-15 13:50:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图确保每一行对于任意维数的矩阵都有零均值。但是,我得到IndexError:运行下面的代码时,索引2超出了大小为2的轴0的界限。我只是在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

Tags: of代码importnumpynpzc矩阵mean
1条回答
网友
1楼 · 发布于 2024-05-15 13:50:00

只是一个想法,但通常你不想在Numpy数组上使用python循环。您可以使用Numpy得到0表示的行,这在理想情况下可以跳过循环

Z - np.mean(Z,axis = 1)[:,None]

另外,我并不是最了解事物如何工作的人,但是Zc = Z可能只是指向同一个数组。至少在我测试它的时候,修改其中一个修改另一个,所以可能添加。你知道吗

Zc = Z.copy()

会有帮助的。你知道吗

Edit:[:,None]只是向mean数组添加了一个额外的维度。你可以很容易地测试它。你知道吗

import numpy as np

test = np.array([1,2,3])

test.shape
Out[3]: (3,)

test[:,None].shape
Out[4]: (3, 1)

通过具有相同的维数,可以直接从数组中减去平均值,而无需for循环。你知道吗

相关问题 更多 >