2012-11-15 72 views
1

我想弄清楚如何對數組的每兩行進行求和。 EG轉換到B在這個例子:Numpy:sum sum of rows

a=array([[ 0, 1, 2, 3], 
     [ 4, 5, 6, 7], 
     [ 8, 9, 10, 11], 
     [12, 13, 14, 15]]) 

b=array([[ 4, 6, 8, 10], 
     [20, 22, 24, 26]]) 

當前的代碼看起來是這樣的:

b=[] 
for num in range(len(a)/2): 
    b.append(a[num*2]+a[num*2+1]) 

當然,必須有一個更快的方法。感謝您的時間。

找到答案爲:

b=a[::2,:]+a[1::2,:] 

事實上有助於我對如何跳過最初的兩行的第二個問題擴大。

>>> a=np.arange(24).reshape(6,-1) 
>>> a 
array([[ 0, 1, 2, 3], 
     [ 4, 5, 6, 7], 
     [ 8, 9, 10, 11], 
     [12, 13, 14, 15], 
     [16, 17, 18, 19], 
     [20, 21, 22, 23]]) 
>>> b=np.vstack((a[:2],a[2::2,:]+a[3::2,:])) 
>>> b 
array([[ 0, 1, 2, 3], 
     [ 4, 5, 6, 7], 
     [20, 22, 24, 26], 
     [36, 38, 40, 42]]) 

非常感謝您的幫助。

回答

10

切片營救!我們只需要指定切片的步幅,並且我們都已經設定好了。

b = a[::2,:] + a[1::2,:] 

演示:

>>> from numpy import * 
>>> a=array([[ 0, 1, 2, 3], 
...  [ 4, 5, 6, 7], 
...  [ 8, 9, 10, 11], 
...  [12, 13, 14, 15]]) 
>>> 
>>> a[::2,:] 
array([[ 0, 1, 2, 3], 
     [ 8, 9, 10, 11]]) 
>>> 
>>> a[1::2,:] 
array([[ 4, 5, 6, 7], 
     [12, 13, 14, 15]]) 
>>> 
>>> a[::2,:] + a[1::2,:] 
array([[ 4, 6, 8, 10], 
     [20, 22, 24, 26]]) 
+0

你的解決方案是更爲直接的比我:) – unutbu

+0

@unutbu - 我注意到:) – mgilson

+0

啊,這是偉大的,易於擴展! – Daniel