2014-12-06 22 views
0

我有2D陣列使用numpy的創建:的Python:以平均在許多行和固定列

>>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,98),y [0] [1] =平均值(7,78)等等。

我想這樣的事情對於平均:

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有什麼建議?

回答

2

你可以只切片陣列分成兩個2×5陣列,然後取平均值的兩個陣列的每一列和使用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循環。

+0

謝謝。有效! – user3440489 2014-12-15 05:03:58