Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python基于另一个数组布尔条件求和子数组_Python_Arrays_Numpy - Fatal编程技术网

Python基于另一个数组布尔条件求和子数组

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

我有两个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.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]