如何从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 = []
当心 – 有一个索引超出范围错误隐藏在上面,你将需要处理