繁体   English   中英

当中断大小可变且整数列表在python中不连续时,通过数据中断来拆分整数列表?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM