Python基于另一个数组布尔条件求和子数组
我有两个numpy阵列Python基于另一个数组布尔条件求和子数组,python,arrays,numpy,Python,Arrays,Numpy,我有两个numpy阵列 a=['1', '', '', '', '', '', '', '1', '', '1', '', '', '1'] b=[118.27316896, 112.86004695, 216.49303595, 154.6773138 , 316.30213565, 97.63585819, 241.84038063, 134.33425789, 209.5535334 , 77.92662544, 81.30731218, 142.512
a=['1', '', '', '', '', '', '', '1', '', '1', '', '', '1']
b=[118.27316896, 112.86004695, 216.49303595, 154.6773138 ,
316.30213565, 97.63585819, 241.84038063, 134.33425789,
209.5535334 , 77.92662544, 81.30731218, 142.5126865 ]
我想创建第三个数组,它根据数组a中的值对b的子数组中的值求和。
因此,对于数组成员c,这将是:
c[0]=sum(b[0:6]) = 1258.082
c[2]=sum(b[7:8]) = 343.88
c[3]=sum(b[9:11]) = 301.74
最后,新数组c包含以下内容:
c= [1258.08,343.88,301.74]
我知道如何从a
array创建bool,但除此之外我再也做不到了。
感谢您的帮助
使用
b
上的np.cumsum
,然后基于a
访问这些值,以从一开始就获得总的总和
cs=np.cumsum(b)[a=='1']
要从最后一个'1'开始求和
获取与前一个求和
cs_prev=[0,*cs[:-1]]
政务司司长-政务司司长
你是一个
变量的长度实际上是13。通过1
缩短a
,我可以得到相似的结果。我认为这是一个输入错误,否则您将需要调整此算法,因为np.cumsum(b)[a=='1']
将由于太多的布尔索引而失败。这里有一个解决方案,首先使用它对cumsum值进行分组
from itertools import groupby
import numpy as np
a = ['1', '', '', '', '', '', '', '1', '', '1', '', '', '1']
b = [118.27316896, 112.86004695, 216.49303595, 154.6773138,
316.30213565, 97.63585819, 241.84038063, 134.33425789,
209.5535334, 77.92662544, 81.30731218, 142.5126865]
a_cs = np.cumsum(np.array(a) == '1')
# a -> [1 1 1 1 1 1 1 2 2 3 3 3 4]
g = groupby(zip(a_cs, b), key = lambda x: x[0])
# {1: [(1, 118.27316896), (1, 112.86004695)..], 2: [(2, 134.33425789)..],...}
print(
[sum(yy[1] for yy in y) for _, y in g]
)
如何获得C中的值?1139.8是什么?这绝对不是b[0:2]
的总和。你需要解释c
中的值是如何从a
和b
中导出的。我们不明白你想要什么,以及如何从你的问题中导出c。
[1258.08194013, 343.88779129, 301.74662412]