2014-11-21 76 views
2

我想做的是numpy矩陣行的意思。因此,對於輸入:速度是一個值得關注的行的numpy平均值

array([[ 1, 1, -1], 
     [ 2, 0, 0], 
     [ 3, 1, 1], 
     [ 4, 0, -1]]) 

我的輸出將是:

array([[ 0.33333333], 
     [ 0.66666667], 
     [ 1.66666667], 
     [ 1.  ]]) 

我想出了一個解決方案result = array([[x] for x in np.mean(my_matrix, axis=1)]),但該功能將在40rows X 10-300的矩陣稱爲很多次列,所以我想,使其更快,這似乎執行緩慢

回答

0

我相信你想簡單地說:

>>> np.mean(a, axis=1) 
array([ 0.33333333, 0.66666667, 1.66666667, 1.  ]) 
2

你可以做這樣的事情:

>>> my_matrix.mean(axis=1)[:,np.newaxis] 
array([[ 0.33333333], 
     [ 0.66666667], 
     [ 1.66666667], 
     [ 1.  ]]) 
+1

注意,在numpy的更新版本,你可以說'my_matrix.mean(軸= 1,keepdims = TRUE)',如果你想保持尺寸縮小爲一個微不足道的(即長度爲1)尺寸。 (我不記得哪個版本增加了這個功能。) – 2014-11-21 15:22:42

0

如果矩陣是新鮮的,獨立的沒有太多可以節省,因爲計算平均值的唯一方法是實際求和的數字。

但是,如果矩陣是從單個固定數據集的部分視圖中獲得的(例如,您正在計算移動平均值),則可以使用總和表。例如後:

st = data.cumsum(0) 

可以計算索引x0x1之間的元件的平均與

avg = (st[x1] - st[x0])/(x1 - x0) 

在O(1)(即,計算時間不取決於有多少元件你是平均)。

你甚至可以使用numpy的直接計算與所述移動平均的陣列與:

res = (st[n:] - st[:-n])/n 

此方法甚至可以擴展到更高維度,例如在在O矩形計算值的平均值(1 )與

st = data.cumsum(0).cumsum(1) 
rectsum = (st[y1][x1] + st[y0][x0] - st[y0][x1] - st[y1][x0])