gpt4 book ai didi

python 数组 : averaging slope and intercept of datasets

转载 作者:太空宇宙 更新时间:2023-11-04 02:20:45 25 4
gpt4 key购买 nike

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

    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 的线。)

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


如果您有任何意见和提示,我将非常高兴,希望我提供给您的信息足够!

提前致谢

罗伯特

最佳答案

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

一步一步:

使用 polyfit 将 deg-1 多项式拟合到每个数组 ab获得每个系数(斜率和截距):

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]])

如果您将其四舍五入到小数点后两位,您会发现它与您想要的结果相同:

>>> 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]])

关于 python 数组 : averaging slope and intercept of datasets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51710566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com