[英]Take sum of numpy array based on a boolean array
我有兩個numpy數組prods
和index
prods = np.asarray([ 0.5 , 0.25, 1.98, 2.4 , 2.1 , 0.6 ])
index = np.asarray([False, True, True, False, False, True], dtype=bool)
我需要使用index
數組計算prods
數組中值的總和。 我想要的輸出是
res = [0.75, 1.98, 5.1]
index
數組中的第一個True
前面是False
,因此我從prods
(.5,.25)中獲取前兩個元素,並將它們加起來(0.75)。 第二個True
in索引沒有前面的False
(因為它前面有True
,所以零位置的False
不計數),因此在這種情況下,我只輸出1.98。 第三True
由兩個前面False
,所以取這些值從prods
陣列(2.4,2.1,0.6)和總結它們。 有關如何執行此操作的任何想法?
我基本上需要類似np.cumsum
東西,但是每次索引中出現True
時,我都需要返回累積和,並將累積和值重置為零。
您可以使用np.split
並將index
數組的np.where
用作拆分位置:
>>> [arr.sum() for arr in np.split(prods, np.where(index)[0]+1)[:-1]]
[0.75, 1.98, 5.0999999999999996]
由於浮點精度,最后一個並非完全是5.1
。 如果您不想使用Fraction
或Decimal
那么您將無能為力。
您還可以在此處使用np.add.reduceat
:
>>> np.add.reduceat(prods, np.append([0], (np.where(index)[0]+1)[:-1]))
array([ 0.75, 1.98, 5.1 ])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.