【问题标题】:Local linear approximation in numpynumpy中的局部线性逼近
【发布时间】:2012-11-06 18:34:42
【问题描述】:

我有一些xy 数据,其中x 向量中的每个条目在y 向量中都有一个对应的条目。此外,x 数据的间距不均匀。

我想在x 样本之间进行插值,以获得x 维度中的均匀间距,并近似对应的y 值。在 numpy 中,interp1d 似乎是一个自然的解决方案,但我的问题有一个警告:x 值不是单调递增的(因为 xy 都是时间的函数)。 interp1d 函数和 interpolate 模块中的其他函数因此在 x 反转方向的那些点上给出奇怪的结果。

我真正想做的只是在每组两个相邻的x 点之间拟合一条直线,然后根据这个非常局部的近似值进行插值。 numpy 中是否有执行此操作的功能,还是我必须自己安装一些东西?

【问题讨论】:

  • 您应该记住将有用的答案标记为“已接受”;这有助于其他人在查看您的问题时找到最有用的答案,也可以让您花时间帮助您的人获得认可。
  • 如果x 不是单调递增或递减,则说明您没有唯一映射。例如,如果你有x=array([0, 1, 0]),如果你通过xx = 0.5,应该对哪两个点进行插值?
  • 我知道没有唯一的映射。但是,假设 x = array([0,1,0]) 如果我将插值输入作为 xx=array([0, 0.5, 1, 0.5, 0]),那么我想得到什么第一个 0.5 值是第一个 2 年之间的中点,第二个 0.5 值是第二个 2 年之间的中点,如果这种解释有意义的话。
  • 您可以访问时间变量吗?如果是这样,您可以使用多元回归根据 x 和 t 预测 y。
  • 多元回归听起来很合理,但除此之外,我需要弄清楚 y 作为 x 的函数变化的速度有多快,这基本上减少了我自己操纵的东西。

标签: python numpy interpolation


【解决方案1】:

你能对你的 xy 对进行排序,然后使用 interp1d 吗?像这样?

import sort
xy = zip(x,y)
new_xy = sorted(xy, key=lambda xy: xy[0])
x = new_xy[:,0]
y = new_xy[:,1]

现在你的 x 是单调递增的,并且关系得到了保留。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    • 2021-07-11
    • 2012-02-02
    • 1970-01-01
    • 2020-10-20
    • 1970-01-01
    相关资源
    最近更新 更多