【问题标题】:spline interpolation between two arrays in pythonpython中两个数组之间的样条插值
【发布时间】:2017-12-19 06:00:13
【问题描述】:

我正在尝试在 Python 中的两个数组之间进行样条插值。我的数据集如下所示:

           |      5        15
    -------+--------------------
        1    32.68      29.16
        2    32.73      27.20
        3    32.78      28.24
        4    32.83      27.27
        5    32.88      25.27
        6    32.93      31.35
        7    32.98      27.39
        8    33.03      26.42
        9    33.08      27.46
       10    33.13      30.50
       11    33.18      27.53
       12    33.23      29.57
       13    33.23      27.99
       14    33.23      28.64
       15    33.23      26.68
       16    33.23      29.72

我正在尝试在两点之间进行样条插值并产生 10 的值,最终看起来像这样(但样条插值):

           |   10
      -----+--------
        1       30.92
        2       29.965
        3       30.51
        4       30.05
        5       29.075
        6       32.14
        7       30.185
        8       29.725
        9       30.27
        10      31.815
        11      30.355
        12      31.4
        13      30.61
        14      30.935
        15      29.955
        16      31.475

我一直在查看使用scipy.interpolate.InterpolatedUnivariateSpline 的示例,但似乎x 只需要一个数组,y 只需要一个数组,我不知道如何让它对这两个数组进行插值。

有人可以帮我指出正确的方向吗?

【问题讨论】:

  • 您好,您的操作似乎有 2 个问题。 1.你想在两个值之间插入一个值,但你只有这两个值,所以样条插值没有任何意义。 2. 您的数据似乎是双变量而不是单变量:一个变量由您的列表示,一个变量由您的行表示。所以也许你需要尝试双变量插值。
  • @user1901493 从数据应该被视为单变量还是双变量的问题来看并不明显。这取决于每一行是否被认为是要插入的独立数据系列。
  • 好的,我们认为它是独立的。因此,对于每一行,您需要从值 5,15 插入到 10 的值。0、20、25 等是否还有其他值?还有一个问题:你能发布你的代码吗,我看不出你是如何组织数组的。
  • 您找到解决方案了吗?

标签: python numpy scipy interpolation


【解决方案1】:

以你拥有的数据量,每个x值只有两个点,分段线性插值是最实用的工具。将您的两个数组设为 v5 和 v15(沿 y=5 行和 y=15 行的值),并将 x 值设为 1,2, ..., 16,我们可以创建一个分段线性插值,如下所示:

from scipy.interpolate import interp2d    
f = interp2d(np.arange(1, 17), [5, 15], np.stack((v5, v15)), kind='linear')

这可以用通常的方式进行评估:例如,f(np.arange(1, 17), 10) 精确地返回您期望的数字。

[ 30.92 ,  29.965,  30.51 ,  30.05 ,  29.075,  32.14 ,  30.185,
    29.725,  30.27 ,  31.815,  30.355,  31.4  ,  30.61 ,  30.935,
    29.955,  31.475]

interp2d 也可以创建三次二元样条,但不能根据这些数据:您的网格在 y 方向上太小了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 2014-06-23
    • 1970-01-01
    • 2018-02-12
    相关资源
    最近更新 更多