给定两个列表,我想得出以下总和:
a = [0,1,2,3,4,5,6,7,8,9]
b = [2,3,5]
Run Code Online (Sandbox Code Playgroud)
结果应该是like的每个b
元素的总和a
:
b[0] = 2
所以第一个总和结果应该是: sum(a[0:2])
b[1] = 3
所以第二个总和结果应该是: sum(a[2:5])
b[2] = 5
所以第三个总和结果应该是: sum(a[5:10])
打印结果: 1,9,35
您可以使用np.bincount
with weights
:
groups = np.repeat(np.arange(len(b)), b)
np.bincount(groups, weights=a)
Run Code Online (Sandbox Code Playgroud)
输出:
array([ 1., 9., 35.])
Run Code Online (Sandbox Code Playgroud)
NumPy 有一个工具来做基于切片的总和减少np.add.reduceat
-
In [46]: np.add.reduceat(a,np.cumsum(np.r_[0,b[:-1]]))
Out[46]: array([ 1, 9, 35])
Run Code Online (Sandbox Code Playgroud)