2014-10-09 41 views
0

我具有40 * 2000的尺寸1500的我用numpy.outer計算矢量的外 產物與矩陣的各列作爲一個向量的矩陣:總結n個矩陣中蟒

np.outer(vector, matrix) 

它顯示了內存錯誤,所以我將矩陣拆分爲矩陣[:,:10]並單獨計算。它產生了1500 *(40 * 10)的矩陣M。我需要總和每個矩陣在這裏我是第一個40列與另一個下一個40列等.....如果我使用循環,它會變得很慢。

 M[:,:40]+ M[:,40:80] + ..... 

有人能幫助我有效地完成這個操作?

回答

0

整形的一點是,所有你需要能夠sum在軸:

import numpy 

M = numpy.arange(100).reshape(5, 20) 

M[:, :4] 
#>>> array([[ 0, 1, 2, 3], 
#>>>  [20, 21, 22, 23], 
#>>>  [40, 41, 42, 43], 
#>>>  [60, 61, 62, 63], 
#>>>  [80, 81, 82, 83]]) 

M[:, 4:8] 
#>>> array([[ 4, 5, 6, 7], 
#>>>  [24, 25, 26, 27], 
#>>>  [44, 45, 46, 47], 
#>>>  [64, 65, 66, 67], 
#>>>  [84, 85, 86, 87]]) 

... 

M[:, 16:20] 
#>>> array([[16, 17, 18, 19], 
#>>>  [36, 37, 38, 39], 
#>>>  [56, 57, 58, 59], 
#>>>  [76, 77, 78, 79], 
#>>>  [96, 97, 98, 99]]) 

M.reshape(M.shape[0], -1, 4).sum(axis=1) 
#>>> array([[ 40, 45, 50, 55], 
#>>>  [140, 145, 150, 155], 
#>>>  [240, 245, 250, 255], 
#>>>  [340, 345, 350, 355], 
#>>>  [440, 445, 450, 455]])