python数组:平均数据集的斜率和截距



我在实现以下目标时遇到了一些困难。假设我有两组从测试中获得的数据:

import numpy as np
a = np.array([[0.0, 1.0, 2.0, 3.0], [0.0, 2.0, 4.0, 6.0]]).T
b = np.array([[0.5, 1.5, 2.5, 3.5], [0.5, 1.5, 2.5, 3.5]]).T

其中第0列中的数据表示(在我的情况下(位移,第1列中的数字表示各自的测量力值。

(给定数据表示斜率为2和1的两条线,y截距均为0。(

现在,我正在尝试编写一个脚本,尽管x值不匹配,但它会对这两个数组求平均值,这样它就会产生

c = [0.0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5], [0.0, 0.75, 1.5,
2.25, 3.0, 3.75, 4.5, 5.25]]).T

(斜率为1.5、y截距为0的直线。(

我尽了最大努力使用切片和线性插值,但似乎我无法理解它(我是一个初学者(。


我很高兴收到任何意见和提示,希望我给你的信息足够!

提前感谢

Robert

您可以获得每个数据集的系数(斜率和截距(,获得平均值,并将该数据拟合到一个新的x值数组中。

循序渐进:

将deg-1多项式拟合到每个阵列a,并使用polyfitb拟合到每个(斜率和截距(的系数:

coef_a = np.polyfit(a[:,0], a[:,1], deg=1)
coef_b = np.polyfit(b[:,0], b[:,1], deg=1)
>>> coef_a
array([  2.00000000e+00,   2.22044605e-16])
>>> coef_b
array([  1.00000000e+00,   1.33226763e-15])

获得这些系数的平均值,用作c:的系数

coef_c = np.mean(np.stack([coef_a,coef_b]), axis=0)
>>> coef_c
array([  1.50000000e+00,   7.77156117e-16])

使用np.arange为c创建新的x值

c_x = np.arange(0,4,0.5)
>>> c_x
array([ 0. ,  0.5,  1. ,  1.5,  2. ,  2.5,  3. ,  3.5])

使用polyval将您的新c系数与新x值相匹配:

c_y = np.polyval(coef_c, c_x)
>>> c_y
array([  7.77156117e-16,   7.50000000e-01,   1.50000000e+00,
2.25000000e+00,   3.00000000e+00,   3.75000000e+00,
4.50000000e+00,   5.25000000e+00])

使用stack:将您的c_xc_y值放在一起

c = np.stack([c_x, c_y])
>>> c
array([[  0.00000000e+00,   5.00000000e-01,   1.00000000e+00,
1.50000000e+00,   2.00000000e+00,   2.50000000e+00,
3.00000000e+00,   3.50000000e+00],
[  7.77156117e-16,   7.50000000e-01,   1.50000000e+00,
2.25000000e+00,   3.00000000e+00,   3.75000000e+00,
4.50000000e+00,   5.25000000e+00]])

如果你把它四舍五入到2位小数,你会发现它和你想要的结果是一样的:

>>> np.round(c, 2)
array([[ 0.  ,  0.5 ,  1.  ,  1.5 ,  2.  ,  2.5 ,  3.  ,  3.5 ],
[ 0.  ,  0.75,  1.5 ,  2.25,  3.  ,  3.75,  4.5 ,  5.25]])

在一句话中:

c = np.stack([np.arange(0, 4, 0.5),
np.polyval(np.mean(np.stack([np.polyfit(a.T[0], a.T[1], 1),
np.polyfit(b.T[0], b.T[1], 1)]),
axis=0),
np.arange(0, 4, 0.5))])
>>> c
array([[  0.00000000e+00,   5.00000000e-01,   1.00000000e+00,
1.50000000e+00,   2.00000000e+00,   2.50000000e+00,
3.00000000e+00,   3.50000000e+00],
[  7.77156117e-16,   7.50000000e-01,   1.50000000e+00,
2.25000000e+00,   3.00000000e+00,   3.75000000e+00,
4.50000000e+00,   5.25000000e+00]])

最新更新