Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python数组:平均数据集的斜率和截距_Python_Python 3.x_Numpy - Fatal编程技术网

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

python数组:平均数据集的斜率和截距,python,python-3.x,numpy,Python,Python 3.x,Numpy,我在实现以下目标时遇到了一些困难。假设我有两组从测试中获得的数据: 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的两条直线,两条直

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

    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
,并
b
使用以获得每个数组的系数(斜率和截距):

获取这些系数的平均值,用作
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 = np.arange(0,4,0.5)

>>> c_x
array([ 0. ,  0.5,  1. ,  1.5,  2. ,  2.5,  3. ,  3.5])
用于将新的
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])
使用
堆栈将
c_x
c_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]])
在一份声明中:
当你说column时,你能更清楚一点你的意思吗?比如说[0]和[1]的第n个元素或者其他什么。你有两组数据,a和b,但读到这里,我不知道a和b中的两组数据是如何相互比较的。我认为试图将所有内容都塞进一个语句会让你在这里失去清晰度。你是对的:编辑为分别包含每个步骤。现在,谢谢!在你的回答上投入了这么多的精力,我很高兴有像你这样的人!您的代码不仅工作得很好,而且我认为通过理解它,我的程序员也变得更好了:))
>>> 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]])