Python:取很多行和固定列的平均值

时间:2014-12-06 14:49:41

标签: python arrays numpy

我使用Numpy创建了2D数组:

>>d=np.random.randint(0, 100, (4,5))
  d=array([[19,  7, 22, 73, 84],
           [ 1, 78, 49, 99, 25],
           [43, 97, 17, 83,  1],
           [98,  1, 81,  4, 82]])

假设每行对应于特定时间,而每列对应于特定频率。我需要为每列平均两行并将其存储在一个新的数组y [2] [5]中。例如y [0] [0] =平均值(19,1),y [1] [0] =平均值(43,48),y [0] [1] =平均值(7,78),依此类推。 / p>

我正在尝试这样的平均值:

for i in range(0,len(d)/2):
    for j in range(0, 5):
        r1=2*i
        r2=2*(i+1)
        y[i][j]=np.mean(d[r1:r2][j])

然而它显示:

y[i][j]=np.mean(d[r1:r2][j])
IndexError: index 4 is out of bounds for axis 0 with size 4

是否有正确使用np.mean的建议?

1 个答案:

答案 0 :(得分:2)

您可以将数组切成两个2x5数组,然后取两个数组的每一列中的均值并使用vstack将它们重新组合在一起:

>>> np.vstack((d[:2].mean(axis=0), d[2:].mean(axis=0)))
array([[ 10. ,  42.5,  35.5,  86. ,  54.5],
       [ 70.5,  49. ,  49. ,  43.5,  41.5]])

您的错误发生是因为您正在使用d[r1:r2][j]创建一个包含两行的d子数组,然后尝试访问该子数组中索引大于1的行(我想您打算使用j访问列。

您需要将该代码替换为d[r1:r2, j]才能生效,但我建议您使用NumPy方法而不是Python for循环。