自NumPy上次出现以来的数量

时间:2015-12-04 20:39:06

标签: python numpy

看似简单的问题:我想创建一个数组,该数组在给定条件的最后一次出现后给出计数。在这种情况下,条件是a> a。 0:

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

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

我假设第一步是类似于np.cumsum(a> 0),但不知道从哪里开始。

编辑:应该澄清我想要在没有迭代的情况下这样做。

3 个答案:

答案 0 :(得分:1)

Numpy one-liner:
cat(temp, strings_line_tokens);

给出

  

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

如果你想在开头有零,请明确地将其变为零:

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))

答案 1 :(得分:0)

根据条件拆分数组,并使用剩余部分的长度以及数组中第一个和最后一个元素的条件状态。

答案 2 :(得分: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)