[英]Splitting a list of integers by breaks in the data when the break size is variable and the list of integers is not consecutive in python?
我正在使用python中的GPS跟踪数据,并尝试通过中断两次GPS收集点之间的时间间隔来拆分GPS跟踪文件。 我已经将所有时间值都转换为整数,并且现在正在使用整数列表。 整数不是连续的,可以分开1、2、3、4或5秒,对于同一GPS轨迹,仍被认为是可行的数据。 但是,某些文件的数据块相隔数百秒-在这种情况下,我想将整数列表拆分为两个单独的文件(最终代表两个单独的行程)。
我一直在基本级别上使用以下代码进行测试:
import numpy as np
a = [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)
b = np.array(a)
print consecutive(b)
>>>
[array([0]), array([47, 48, 49, 50]), array([97, 98, 99])]
如果步长在实际数据中始终为1,这将起作用-但是,步长不是1。 我尝试插入列表中合适的最大步长,但得到以下信息:
import numpy as np
a = [0, 47, 49, 51, 54, 97, 99, 101, 104, 107, 108, 356, 357, 358]
def consecutive(data, stepsize=5):
return np.split(data, np.where(np.diff(data) != stepsize)[0]+1)
b = np.array(a)
print consecutive(b)
>>>
[array([0]), array([47]), array([49]), array([51]), array([54]), array([97]), array([99]), array([101]), array([104]), array([107]), array([108]), array([356]), array([357]), array([358])]
每个数字都是单独的列表,因为步长均不等于5。
我尝试以以下方式编辑此工作脚本以解决可变步长的问题,但由于语法无效而出现错误:
import numpy as np
a = [0, 47, 49, 51, 54, 97, 99, 101, 104, 107, 108, 356, 357, 358]
def consecutive(data, stepsize<5):
return np.split(data, np.where(np.diff(data) != stepsize)[0]+1)
b = np.array(a)
print consecutive(b)
该错误表示<是步进大小的无效运算符。 有人能解决这个问题吗? 本质上,如果整数之间的步长小于5,则希望整数位于同一列表中。如果步长大于5,则希望将其作为新列表返回。
我可能会缺少一些基本知识,但是感谢我目前定义/使用的功能以外的任何建议或其他解决方法。
我还要感谢在此链接上提供了另一个问题答案的人们: 如何从numpy中的数组中找到连续元素的组? 因为它帮助我入门。
np.split(a, np.where(np.diff(a) > 5)[0]+1)
产量
[array([0]), array([47, 48, 49, 50]), array([97, 98, 99])]
因此只需将功能更改为:
def consecutive(data, stepsize=5):
return np.split(data, np.where(np.diff(data) > stepsize)[0]+1)
更新以合并更大的样本量
a = [0, 47, 49, 51, 54, 97, 99, 101, 104, 107, 108, 356, 357, 358]
np.split(a, np.where(np.diff(a) > 5)[0]+1)
产生此答案:
[array([0]),
array([47, 49, 51, 54]),
array([ 97, 99, 101, 104, 107, 108]),
array([356, 357, 358])]
这是您要找的东西吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.