列表的可变大小块的总和,其中大小由其他列表给出

Sad*_*rin 8 python numpy

给定两个列表,我想得出以下总和:

a = [0,1,2,3,4,5,6,7,8,9]
b = [2,3,5]
Run Code Online (Sandbox Code Playgroud)

结果应该是like的每个b元素的总和a

  1. b[0] = 2 所以第一个总和结果应该是: sum(a[0:2])
  2. b[1] = 3 所以第二个总和结果应该是: sum(a[2:5])
  3. b[2] = 5 所以第三个总和结果应该是: sum(a[5:10])

打印结果: 1,9,35

Qua*_*ang 9

您可以使用np.bincountwith 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)


Div*_*kar 6

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)