【问题标题】:Interpolation of 2d data(velocity(x,y)) over 1D array (time)在一维数组(时间)上对二维数据(速度(x,y))进行插值
【发布时间】:2017-10-31 08:17:16
【问题描述】:

我有一个随时间变化的速度列表。有没有办法在该列表的大小(时间)内插入该数据? 为了更清楚,这里有一个简单的代码:

import numpy as np
v_list = []
v_time1 = [[1,1], [2,2]] #2D
v_time2 = [[0,1], [3,4]] #2D
v_list.append(v_time1,v_time2)
time = np.size(v_list) #1D

我的目标是随着时间的推移插入 v_list 中包含的数据,因此我可以根据所需的时间“调用”它。像这样的:

v_desired_time = interpolated_velocities(desired_time) #2D

干杯!

【问题讨论】:

  • 不清楚您的代码试图做什么。 v_time1v_time2 中的值是什么?它们是 x 和 y 速度值还是时间值?附加到v_listv1v2 的值是什么?
  • 输入错误。现在检查。为什么这些矩阵中的值很重要?它们只是我放在这里的一些随机数字,以明确我想要做什么。如果我可以用 [2,2] 的形状插入这个呈现的数据,那么我可以插入我的数据,即 [840, 620]。上面这些数字代表什么完全无关紧要。
  • 我想知道它们是时间值还是速度值(实际数字无关紧要),所以我可以尝试确定如何处理它们。
  • 让我们这样说:雷达正在记录 x 方向上 4 个点的速度。这就是上面那些数字所代表的。它每小时保存一次数据,持续两个小时。这就是为什么上面有两个矩阵。我让它尽可能简单,每次测量一个矩阵。现在假设我想知道 t = 0.5 小时时的速度。这与物理或速度无关。这是关于插值数据。
  • 是否有理由将四个测量值存储在 2x2 数组中,而不是存储在长度为 4 的一维数组中?

标签: python numpy scipy interpolation


【解决方案1】:

您可以使用scipy.interpolate.interp1d。它可以处理作为数组的函数的值。

例如,

In [35]: from scipy.interpolate import interp1d

这是您的测量结果。我会将它们放入一个名为 v 的 numpy 数组中:

In [36]: v_time1 = [[1,1], [2,2]] #2D

In [37]: v_time2 = [[0,1], [3,4]] #2D

In [38]: v = np.array([v_time1, v_time2])

In [39]: v
Out[39]: 
array([[[1, 1],
        [2, 2]],

       [[0, 1],
        [3, 4]]])

t 保存时间值:

In [40]: t = np.arange(v.shape[0])

In [41]: t
Out[41]: array([0, 1])

创建插值器。默认情况下,它使用线性插值:

In [42]: f = interp1d(t, v, axis=0)

在几个时间值检查插值器的值:

In [43]: f(0)
Out[43]: 
array([[ 1.,  1.],
       [ 2.,  2.]])

In [44]: f(0.5)
Out[44]: 
array([[ 0.5,  1. ],
       [ 2.5,  3. ]])

In [45]: f(1)
Out[45]: 
array([[ 0.,  1.],
       [ 3.,  4.]])

【讨论】:

  • 魔术。我之前在没有指定插值轴的情况下这样做。这就是问题所在。谢谢。
猜你喜欢
  • 2013-09-13
  • 1970-01-01
  • 2017-05-25
  • 1970-01-01
  • 2020-09-09
  • 2016-07-18
  • 1970-01-01
  • 2013-08-17
  • 2015-05-19
相关资源
最近更新 更多