我使用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的建议?
答案 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
循环。