在Numpy矩阵中按元素求和第n列

时间:2017-05-02 16:36:13

标签: python numpy matrix vectorization

我有以下numpy矩阵:

A = [[a,b,c,d,e,f],
     [g,h,i,j,k,l],
     ...]

我需要以元素方式方式对所有第n列求和。所以,如果n是2,答案必须是:

B = [[a+c+e, b+d+f],
     [g+i+k, h+j+l],
     ...]

(比如将矩阵分成3个,每个有2列并添加它们。)

但如果n为3,答案必须是:

C = [[a+d, b+e, c+f],
     [g+j, h+k, i+l],
     ...]

(比如将矩阵分成2个,每个有3列并添加它们。)

是否有一般情况会接受值n而不诉诸于循环?

1 个答案:

答案 0 :(得分:3)

重塑以将最后一个轴分成两个,后者的长度为n,并且沿着前者加上 -

A.reshape(A.shape[0],-1,n).sum(1)

示例运行 -

In [38]: A
Out[38]: 
array([[0, 5, 3, 2, 5, 6],
       [6, 1, 0, 8, 4, 0],
       [8, 6, 1, 5, 7, 0]])

In [39]: n = 2

In [40]: A.reshape(A.shape[0],-1,n).sum(1)
Out[40]: 
array([[ 8, 13],
       [10,  9],
       [16, 11]])

In [41]: n = 3

In [42]: A.reshape(A.shape[0],-1,n).sum(1)
Out[42]: 
array([[ 2, 10,  9],
       [14,  5,  0],
       [13, 13,  1]])