Python 获得x值不相同的多条曲线的平均曲线

Python 获得x值不相同的多条曲线的平均曲线,python,plot,extrapolation,Python,Plot,Extrapolation,我有几个数据集包含许多x和y值。值少得多的示例如下所示: 数据集1: x1 y1 --------- --------- 0 100 0.0100523 65.1077 0.0201047 64.0519 0.030157 63.0341 0.0402094 62.1309 0.0502617 61.3649 0.060314 60.8614 0.0703664 60.3555 0.0804187

我有几个数据集包含许多x和y值。值少得多的示例如下所示:

数据集1

x1          y1        
---------   ---------   
0           100
0.0100523   65.1077
0.0201047   64.0519
0.030157    63.0341
0.0402094   62.1309
0.0502617   61.3649
0.060314    60.8614
0.0703664   60.3555
0.0804187   59.7635
0.0904711   59.1787
数据集2

x2          y2        
---------   ---------   
0           100
0.01        66.119
0.02        64.4593
0.03        63.1377
0.04        62.0386
0.05        61.0943
0.06        60.2811
0.07        59.5603
0.08        58.8908
这里我有两个数据集,包含10个x和y值。y值总是不同的,但在某些情况下,x值将是相同的,有时它们将是不同的-如在本例中。不是很多,但他们还是不同的。将这两个数据集绘制成一个图表,会产生两条不同的曲线,现在我想制作两条曲线的平均值。如果x值相同,我只需要取y值的平均值,并将它们与x值进行对比,但是如上所述,它们有时不同,有时相同。 有没有什么方法可以外推,或者类似的方法,这样我就可以平均值(同样,对于许多数据集),而不需要“猜测”或说“它们几乎相同,所以只需平均y值就可以了”。
外推法似乎是一种可行的方法,但我从未在python中使用过它,也许还有更好的方法可以做到这一点

如果每个数据集中的点数相同(你的示例没有,但你在帖子中说你有),你可以得到每个集合中相应
x
值的平均值,以及相应
y
值的平均值。如果没有相同数量的值,可以按照中的答案进行操作

例如,给定您的数据,但每个数据都有9分:

>>> x1
array([0.       , 0.0100523, 0.0201047, 0.030157 , 0.0402094, 0.0502617,
       0.060314 , 0.0703664, 0.0804187])
>>> y1
array([100.    ,  65.1077,  64.0519,  63.0341,  62.1309,  61.3649,
        60.8614,  60.3555,  59.7635])
>>> x2
array([0.  , 0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08])
>>> y2
array([100.    ,  66.119 ,  64.4593,  63.1377,  62.0386,  61.0943,
        60.2811,  59.5603,  58.8908])
你可以做:

import numpy as np

mean_x = np.mean((x1,x2), axis=0)
mean_y = np.mean((y1,y2), axis=0)
当要以视觉方式显示时,可以进行绘图。在这里,黑线是您的平均线,蓝色和橙色线是您的原始数据集:

import matplotlib.pyplot as plt
plt.plot(x1,y1)
plt.plot(x2,y2)
plt.plot(mean_x,mean_y, color='black')
plt.show()

如果曲线的点数不相同,也可以绘制平均曲线,使用线性插值使所有曲线上的点数相等

假设您需要绘制一组曲线的平均曲线,并且所有此类曲线都有xsys,其中xs包含每条曲线的x坐标,ys包含y坐标。平均曲线的X轴将从0变为max(xs),平均曲线的Y轴是ys中每个Y的平均值,在每个Xi中进行评估∈ X(即垂直y(xi)对于y中的每个y,numpy轴=0)。对ys中缺少的y值使用插值

mean_x_axis = [i for i in range(max(xs))]
ys_interp = [np.interp(mean_x_axis, xs[i], ys[i]) for i in range(len(xs))]
mean_y_axis = np.mean(ys_interp, axis=0)

plt.plot(mean_x_axis, mean_y_axis)

是的,我的错。。。每个数据集具有相同数量的值。我认为这是一个很好的方式。非常感谢。