【问题标题】:Interpolating curves whose x ranges are contained in the x range of another curve (Python)对 x 范围包含在另一条曲线的 x 范围内的曲线进行插值 (Python)
【发布时间】:2017-09-18 11:04:50
【问题描述】:

我有两组数据点,set1set2,每组都包含两列xy值,就像那样(其中一个,另一个具有相似的结构和值)

x            y

0.015        0.01
0.025        0.015
..           ..
0.115        0.07

所以我们有一个x 轴以0.01 的步长缩放,而y 是随机的。然后我有第三组,set3,看起来是这样的

x           y

0.025       0.2
0.075       0.1
...         ...
3.475       0.005

所以增量x 又是恒定的,在这种情况下等于0.05,而y 又是随机的。 set3x 的范围比set1set2 宽得多。

我的目标是在 x 中拥有三个跨越相同范围的集合。

为此,我考虑插入两个较短的集合,set1set2,它们的 x 范围包含在 set3 的集合中。

我做到了(例如set1,类似set2),使用

import scipy.interpolate as itp
spline_set1 = itp.splrep(xvalues_set1, yvalues_set1)
extended_set1 = itp.splev(xvalues_set3, spline_set1)

但是extended_set1 的情节看起来好像不是要走的路。这些值太高了,比它们应该的值大了许多数量级。

有什么想法吗?

【问题讨论】:

  • 我只是在我自己的数据上尝试了splrep,老实说,我不太了解它的工作原理以及它产生的输出。对于样条插值,我总是使用scipy.interpolate.CubicSpline。这通常效果很好,你可以试一试。其次,我不了解您想要的输出。 set1 和 set2 的插值只会相应地缩小您的 x 值和 y 值之间的空间(即您填补空白)。但是,如果 set3 的范围更广,则 set1set2 的插值不会对它们不包含的值有所帮助。你想要的结果是什么?
  • @offeltoffel 谢谢,这确实是一个好点。事实上,我认为我正在寻找的是外推而不是插值。我想要的是在 set3 的相同 x 值范围内定义 set1 和 set2 的值。我认为应该通过外推来完成,因为 set1 和 set2 的 x 范围较小并且包含在 set3 的 x 范围内

标签: python interpolation extrapolation


【解决方案1】:

按照您对我的评论的回答并假设您正在寻找外推而不是插值:

基本上,您正在创建不存在的信息。任何推断均基于您对yx 相关的行为的了解。在这种情况下,y3 值并不重要(这就是您在自己的解决方案中不需要它们的原因)。

样条插值的基本工具同样是scipy.interpolate.UnivariateSplinescipy.interpolate.CubicSpline。两者都能够推断。在你的情况下,它是这样工作的:

import scipy.interpolate as itp
spline = itp.UnivariateSpline(xvalues_set1, yvalues_set1)
extended_set1 = spline(xvalues_set3)

但是,结果可能仍然值得怀疑。样条外推的行为可能看起来不合理,但在数学上仍然是正确的。如果您想了解发生了什么,我建议您使用matplotlib.pyplot 绘制结果。

【讨论】:

    猜你喜欢
    • 2019-11-02
    • 1970-01-01
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    • 2023-03-16
    • 1970-01-01
    相关资源
    最近更新 更多