我有以下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而不诉诸于循环?
答案 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]])