首页 > 解决方案 > 如何用相同的插值点和相同的点之间的距离对来自不同数据集的数据点进行插值以计算它们的平均值?

问题描述

很抱歉这个问题很长,也许有一个快速的解决方案,但我无法弄清楚这一点。我有 3 个具有 x 和 y 数据点的不同数据集,如下所示:

line1_x = [277.75, 287.68, 308.77, 322.23, 342.98, 363.99, 387.59, 396.83, 401.52, 405.78, 408.30,
           408.06, 406.94, 406.11, 403.46, 401.14, 397.28, 394.04, 390.62, 386.99, 384.31, 380.41,
           375.85, 372.25, 368.35, 364.86, 363.01, 361.84, 361.85, 363.79, 366.25, 368.94, 371.58,
           376.11, 380.97, 387.33, 391.61, 392.36, 373.35, 350.68]

line1_y = [806.00, 779.43, 713.71, 731.96, 701.13, 621.68, 525.04, 490.21, 467.48, 455.57, 445.59,  
           440.54, 436.74, 432.71, 434.32, 438.06, 449.00, 462.25, 476.56, 493.43, 514.02, 538.52,  
           570.87, 614.20, 664.00, 708.06, 750.61, 786.38, 814.16, 834.67, 853.45, 864.71, 872.50,  
           882.23, 893.28, 907.94, 922.18, 931.05, 950.03, 1085.45]

line2_x = [443.98, 442.71, 441.24, 437.57, 427.09, 417.82, 418.20, 418.14, 417.76, 414.84, 411.93, 
           408.14, 404.29, 402.48, 400.63, 398.01, 394.43, 392.05, 391.69, 391.06, 388.61, 384.59, 
           378.93, 374.67, 372.82, 371.07, 370.50, 370.96, 372.11, 374.10, 377.05, 381.65, 385.54, 
           388.72, 389.27, 389.00, 389.71, 391.49, 392.60, 385.89, 384.39, 361.87]

line2_y = [299.48, 317.04, 338.92, 360.55, 405.99, 451.64, 493.67, 516.66, 530.73, 540.62, 548.90,
           553.39, 555.65, 559.21, 564.41, 571.17, 577.56, 585.31, 592.54, 606.96, 626.18, 651.76,  
           679.82, 710.62, 744.39, 774.02, 802.14, 829.54, 849.98, 865.51, 879.94, 894.02, 903.30,  
           910.80, 918.08, 926.39, 935.80, 947.09, 955.08, 965.04, 1076.83, 1110.45]

line3_x = [302.52, 313.15, 340.68, 352.96, 364.85, 378.51, 407.05, 437.33, 453.73, 462.99, 467.79, 
           470.68, 472.10, 473.56, 473.49, 472.72, 471.14, 468.91, 467.76, 466.58, 463.90, 460.31,
           457.23, 453.48, 448.68, 443.65, 438.08, 433.63, 429.14, 424.09, 418.62, 415.17, 414.60, 
           417.55, 422.72, 429.17, 436.35, 443.75, 450.29, 455.66, 459.26, 461.39, 462.30, 463.23, 
           469.86, 435.97]

line3_y = [794.42, 809.18, 782.48, 761.93, 771.51, 776.51, 689.07, 560.78, 531.03, 524.44, 518.59, 
           516.73, 514.03, 511.97, 511.63, 518.31, 532.60, 549.91, 563.77, 582.81, 601.98, 617.95, 
           628.03, 640.11, 658.30, 679.82, 703.00, 730.40, 754.16, 776.00, 800.85, 824.39, 844.47, 
           856.76, 866.70, 875.72, 884.18, 892.66, 903.61, 912.93, 922.55, 928.60, 932.00, 952.27, 
           1029.70, 1065.12]

该数据集是一系列点,因此时间和位置很重要,这就是为什么不能简单地将点添加到较小的数据集中并计算平均值的原因。我一直在尝试对数据进行插值,以便所有插值线具有相同的距离,然后使用它来计算插值线每一步的平均值。数据如下所示:

在此处输入图像描述

我使用 interp1d 函数使用 3 个数据集的最小 y 和最大 y 计算了插值:

interpolated_y = np.linspace(minimum_y, maximum_y, num=100, endpoint=True)
interpolated_x = interp1d(line1_y,line1_x, fill_value="extrapolate")(interpolated_y)

它们看起来像这样:

在此处输入图像描述

这很好,因为插值点的步骤之间的所有距离对于所有线都是相同的,并且插值点的数量完全相同,但是如果我用它来计算插值步骤之间的平均值,我会丢失有关的信息起点,即我无法计算起点之间的平均值。

我的问题是:如何对 3 个数据集进行插值,以使每个数据集具有相同数量的插值点,并且每个点之间的距离相同?并且插值应该从起点开始并沿正确的方向继续。对于数据集较小的情况,应该进行外推。

或者,考虑到它们是时间序列点,是否有另一种方法来计算这些点的平均值?

标签: pythonpython-3.xinterpolationlinear-interpolation

解决方案


推荐阅读