2014-11-18 3 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]])