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

2024-04-20 10:47:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在python中处理GPS跟踪数据,并尝试通过在GPS点的收集之间经过的时间量的中断来分割GPS跟踪文件。我已经将所有的时间值转换成整数,现在我正在处理一个整数列表。整数不是连续的,并且可以被1、2、3、4或5秒分开,并且仍然被认为是同一GPS轨迹的可行数据。但是,有些文件中的数据块相隔数百秒—在本例中,我想将整数列表拆分为两个单独的文件(最终表示两个单独的trip)。你知道吗

我一直在使用以下代码进行基本测试:

    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,则这将起作用-但事实并非如此。我尝试在列表中插入适当的最大步长,但得到以下结果:

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,我希望它作为一个新列表返回。你知道吗

我可能遗漏了一些基本的东西,但很感谢您在我目前定义/使用的功能之外提出的任何建议或其他解决方法。你知道吗

我还想感谢在这个链接上为另一个问题提供答案的人:how to find the groups of consecutive elements from an array in numpy?,因为这有助于我开始学习。你知道吗


Tags: 文件数据importnumpy列表datadefas
1条回答
网友
1楼 · 发布于 2024-04-20 10:47:34
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])]

这就是你要找的吗?你知道吗

相关问题 更多 >