簡體   English   中英

基於布爾數組獲取numpy數組的總和

[英]Take sum of numpy array based on a boolean array

我有兩個numpy數組prodsindex

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 如果您不想使用FractionDecimal那么您將無能為力。


您還可以在此處使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM