计算numpy数组中长度连续变化的值的连续出现

发布于 2021-01-29 19:34:07

假设我在numpy数组中有一堆数字,并且根据返回布尔数组的条件对它们进行了测试:

np.random.seed(3456)
a = np.random.rand(8)
condition = a>0.5

并使用此布尔数组,我想计算True连续出现的所有长度。例如,如果我有,[True,True,True,False,False,True,True,False,True]我想回去[3,2,1]

我可以使用以下代码来做到这一点:

length,count = [],0
for i in range(len(condition)):

    if condition[i]==True:
        count += 1
    elif condition[i]==False and count>0:
        length.append(count)
        count = 0

    if i==len(condition)-1 and count>0:
        length.append(count)

    print length

但是是否已经为此或python,numpy,scipy等函数实现了任何功能,该函数计算给定输入在列表或数组中连续出现的长度?

关注者
0
被浏览
61
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    这是使用的解决方案itertools(可能不是最快的解决方案):

    import itertools
    condition = [True,True,True,False,False,True,True,False,True]
    [ sum( 1 for _ in group ) for key, group in itertools.groupby( condition ) if key ]
    
    Out:
    [3, 2, 1]
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看