如何从numpy中的数组中find连续元素的组?

我必须从一个numpy数组中聚集连续的元素。 考虑下面的例子

a = [ 0, 47, 48, 49, 50, 97, 98, 99] 

输出应该是一个元组列表,如下所示

  [(0),(47, 48, 49, 50),(97, 98, 99)] 

这里的差别只是一个。 元素之间。 如果差异也可以被指定为限制或硬编码,那将是非常好的。

非常感谢。

这里有一个可以帮助你的函数:

 def group_consecutives(vals, step=1): """Return list of consecutive lists of numbers from vals (number list).""" run = [] result = [run] expect = None for v in vals: if (v == expect) or (expect is None): run.append(v) else: run = [v] result.append(run) expect = v + step return result >>> group_consecutives(a) [[0], [47, 48, 49, 50], [97, 98, 99]] >>> group_consecutives(a, step=47) [[0, 47], [48], [49], [50, 97], [98], [99]] 
 def consecutive(data, stepsize=1): return np.split(data, np.where(np.diff(data) != stepsize)[0]+1) a = np.array([0, 47, 48, 49, 50, 97, 98, 99]) consecutive(a) 

产量

 [array([0]), array([47, 48, 49, 50]), array([97, 98, 99])] 

(a[1:]-a[:-1])==1将产生一个布尔数组,其中False表示运行中断。 你也可以使用内置的numpy.grad 。

这是我到目前为止:不确定是100%正确的

 import numpy as np a = np.array([ 0, 47, 48, 49, 50, 97, 98, 99]) print np.split(a, np.cumsum( np.where(a[1:] - a[:-1] > 1) )+1) 

收益:

 >>>[array([0]), array([47, 48, 49, 50]), array([97, 98, 99])] 

这听起来有点像家庭作业,所以如果你不介意我会build议一个方法

您可以使用循环遍历列表

 for i in range(len(a)): print a[i] 

你可以testing列表中的下一个元素是否符合如下的一些标准

 if a[i] == a[i] + 1: print "it must be a consecutive run" 

你可以单独存储结果

 results = [] 

当心 – 有一个索引超出范围错误隐藏在上面,你将需要处理