簡體   English   中英

自NumPy上次出現以來的計數

[英]Count since last occurence in NumPy

看似簡單的問題:我想創建一個數組,該數組給出自給定條件的最后一次出現以來的計數。 在這種情況下,令條件為> 0:

在:[0,0,5,0,0,2,1,0,0]

out:[0,0,0,1,1,2,0,0,1,2]

我認為第一步將類似於np.cumsum(a> 0),但是不確定從那里開始。

編輯:應該澄清一下,我想不做迭代。

麻木的一線:

x = numpy.array([0, 0, 5, 0, 0, 2, 1, 0, 0])
result = numpy.arange(len(x)) - numpy.maximum.accumulate(numpy.arange(len(x)) * (x > 0))

[0,1,0,1,2,2,0,1,2,2]

如果要在開始時使用零,請明確將其設為零:

result[:numpy.nonzero(x)[0][0]] = 0

根據條件拆分數組,並使用剩余片段的長度以及數組中第一個和最后一個元素的條件狀態。

一個純python解決方案:

result = []
delta = 0
for val in [0, 0, 5, 0, 0, 2, 1, 0, 0]:
    delta += 1
    if val > 0:
        delta = 0            
    result.append(delta)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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