假设我在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]。
[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等函数实现了任何功能,该函数计算给定输入在列表或数组中连续出现的长度?
这是使用的解决方案itertools(可能不是最快的解决方案):
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]