繁体   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