2014-11-18 4 views
0

Я хотел бы суммировать все n столбцов матрицы. Как я могу сделать это простым способом, не используя цикл for? Это то, что я сейчас:NumPy: сумма каждого n столбцов матрицы

n = 3 #size of a block we need to sum over 
total = 4 #total required sums 
ncols = n*total 
nrows = 10 
x = np.array([np.arange(ncols)]*nrows) 

result = np.empty((total,nrows)) 
for i in range(total): 
    result[:,i] = np.sum(x[:,n*i:n*(i+1)],axis=1) 

Результат будет

array([[ 3., 12., 21., 30.], 
     [ 3., 12., 21., 30.], 
     ... 
     [ 3., 12., 21., 30.]]) 

Как я могу векторизации эту операцию?

ответ

3

В одну сторону; сначала переформатируйте x в 3D-массив и затем суммируйте по последней оси:

>>> x.reshape(-1, 4, 3).sum(axis=2) 
array([[ 3, 12, 21, 30], 
     [ 3, 12, 21, 30], 
     [ 3, 12, 21, 30], 
     [ 3, 12, 21, 30], 
     [ 3, 12, 21, 30], 
     [ 3, 12, 21, 30], 
     [ 3, 12, 21, 30], 
     [ 3, 12, 21, 30], 
     [ 3, 12, 21, 30], 
     [ 3, 12, 21, 30]])