获取 x 值不相同的多条曲线的平均曲线
Getting a mean curve of several curves with x-values not being the same
我有几个包含许多 x 值和 y 值的数据集。具有更少值的示例如下所示:
data_set1
:
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
data_set2
:
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 值作图,但如前所述,它们有时不同,有时相同。
有没有某种方法可以推断或类似的方法,这样我就可以在不使用 "just guessing" 或说 "they are pretty much the same, so it will be okay just to average the y-values" 的情况下对值进行平均(同样,对于许多数据集)。
外推似乎是一种可行的方法,但我从未在 python 中使用过它,也许还有更好的方法来做到这一点?
如果你在每个数据集中有相同数量的点(你的例子没有,但你在你的 post 中声明你有),你可以得到各自的平均值 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)
而什么时候用视觉展现,可以plot。在这里,黑线是你的平均线,蓝线和橙色线是你的原始数据集:
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 轴是每个 [= 的平均值25=]y in ys,在每个 Xi ∈ X(即 vertival-wise y(xi) 对于 ys 中的每个 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)
我有几个包含许多 x 值和 y 值的数据集。具有更少值的示例如下所示:
data_set1
:
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
data_set2
:
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 值作图,但如前所述,它们有时不同,有时相同。 有没有某种方法可以推断或类似的方法,这样我就可以在不使用 "just guessing" 或说 "they are pretty much the same, so it will be okay just to average the y-values" 的情况下对值进行平均(同样,对于许多数据集)。 外推似乎是一种可行的方法,但我从未在 python 中使用过它,也许还有更好的方法来做到这一点?
如果你在每个数据集中有相同数量的点(你的例子没有,但你在你的 post 中声明你有),你可以得到各自的平均值 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)
而什么时候用视觉展现,可以plot。在这里,黑线是你的平均线,蓝线和橙色线是你的原始数据集:
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 轴是每个 [= 的平均值25=]y in ys,在每个 Xi ∈ X(即 vertival-wise y(xi) 对于 ys 中的每个 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)