Python 获得x值不相同的多条曲线的平均曲线
我有几个数据集包含许多x和y值。值少得多的示例如下所示: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
数据集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()
如果曲线的点数不相同,也可以绘制平均曲线,使用线性插值使所有曲线上的点数相等 假设您需要绘制一组曲线的平均曲线,并且所有此类曲线都有xs和ys,其中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)
是的,我的错。。。每个数据集具有相同数量的值。我认为这是一个很好的方式。非常感谢。