【问题标题】:Python Interpolating TimePython 插值时间
【发布时间】:2014-08-20 18:40:07
【问题描述】:

python 新手,希望我问对了。

我有一个庞大的数据集,我想每秒钟插入一次,并用提供的适当纬度和经度填补空白:

  Lat     Long    Time
-87.10   30.42    16:38:49
                      .
                      .
                      .
-87.09   30.40    16:39:22
                      .
                      .
                      .
-87.08   30.40    16:39:30

所以我想每秒生成一个新的经纬度。

我已经绘制了对应的经纬度,想用插值后的数据补上可能的点。

【问题讨论】:

  • 您具体在哪个部分遇到了问题?找出丢失的时间戳?在两点之间进行插值?等等?
  • 有没有办法生成两者之间的缺失时间?所以在 16:38:49 和 16:39:22 之间应该还有 34 个点。然后在每个点插入 lat 和 long 应该是什么。

标签: python interpolation


【解决方案1】:

如果线性插值对您来说足够好,您可以将 numpy.interp 函数与要用于插值的时间数组以及从输入文件读取的时间和经度/纬度数据点(时间必须增加,因此您可能需要对数据进行排序)。

要读取文件的数据,您可以使用numpy.loadtxt 函数添加转换器将时间转换为递增的数字:

import numpy as np
from matplotlib.dates import strpdate2num

lon, lat, time = np.loadtxt('data.txt', skiprows=1,
        converters={2:strpdate2num('%H:%M:%S')}, unpack=True)

然后您可以使用 interp 函数对经度和纬度值进行插值。 linspace 函数的最后一个参数给出了时间插值数据中的点数。

interp_time = np.linspace(time[0], time[-1], 100)
interp_lon = np.interp(interp_time, time, lon)
interp_lat = np.interp(interp_time, time, lat)

对于比线性插值更复杂的事情,scipy.interpolation 中有几个工具。

【讨论】:

  • 谢谢 Miguel,我会看一下这个例子,看看我能不能弄明白。我现在有时间作为第三列,我需要将其放在单独的 CSV 文件中吗?此外,我的数据(纬度/经度)不是按升序或降序排列的,它们是飞行路径的图,它们在回溯时重叠。这会是个大问题吗?
  • 将所有数据放在同一个文件中应该没问题。我将在答案中添加一个示例。
  • 我有点困惑:lon, lat, time = np.loadtxt('data.txt', converters={2:strpdate2num('%H:%M:%S') }, unpack=True 你设置 lon, lat, time = 那个语句?
  • 它将data.txt中的数据读取到每列对应的三个数组中。转换器函数将时间转换为数字。
  • 我收到一个 IndexError: list assignment index out of range x, y, time = np.loadtxt('12cch01_new.csv', converters={2:strpdate2num('%H:%M: %S')}, unpack=True) timeinterp = np.linspace(time[0], time[-1], 100) xinterp = np.interp(timeinterp, time, x) yinterp = np.interp(timeinterp, time , y)
【解决方案2】:

以前用excel VBA做的,发现python应该做得更好,但没有。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    • 2017-08-13
    相关资源
    最近更新 更多