【发布时间】:2015-09-02 15:57:53
【问题描述】:
我正在使用 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,这将起作用 - 但是,它们不是。我尝试在列表中插入适当的最大步长,但得到以下结果:
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)
错误说
我可能遗漏了一些基本的东西,但感谢我当前定义/使用的功能之外的任何建议或其他解决方法。
我还要感谢那些在此链接中提供另一个问题答案的人:how to find the groups of consecutive elements from an array in numpy?,因为它帮助我开始了。
【问题讨论】:
-
你真的应该格式化你的代码。
-
请看这里如何格式化你的代码块:meta.stackexchange.com/questions/22186/…
-
感谢您的建议 - 这是我第二次发帖。代码现在应该被适当地格式化了。