python求一条曲线的斜率,最小二乘法拟合直线斜率公式

  python求一条曲线的斜率,最小二乘法拟合直线斜率公式

  假设有以下两个数据列表:

  x=[ 1,2,3,4,5,6,7,8,9,10 ]

  y=[ 1,2,3,4,5,6,8,10,12,14 ]

  也就是说,很明显,对这些数据拟合一条直线是不够的,梯度在数据的某个点发生了变化。(显然,我们很容易从这个数据集中找到变化的位置,但是我处理的数据集不是很清晰,所以我们会忽略它。)我觉得导数可能有点道理,这里的重点是把它当做一个自由参数。我的意思是,‘这是这个,/-这是不确定性,这是前面的线性斜率。从这一点开始,”

  请注意,如果安排比较简单,可以使用这个。谢谢大家!

  我不太明白你的问题。你想从两个斜坡上找到不同的指数吗?你说的不确定性是什么意思?为什么斜率是自由参数?它由两个“连续的”点定义。

  顺便说一下,Python没有任何类似数组的东西。斯塔克overflow.com/questions/1514553/hellip;

  @当然有数组。

  @Sumnerevans有内置的array.array和更全面的数组如numpy.ndarray后者只用于科学/数值计算领域,而前者更为少见。然而,调用list数组是一个常见的错误。

  @随机化,这是一个必须导入的模块,不是list这样的语言的核心和一流部分。

  @那是标准库的一部分。因为它只是位于与__builtins__不同的名称空间中,不是Python的一部分。Numpy是第三方扩展,但是在核心python语言中有明确添加的函数来帮助Numpy。例如,一个椭圆形列表:

  @Sumnerevans你听过“包括电池”这个词吗?如果数组位于标准python库中,还需要什么?它是否内置于所有可能的函数和数据类型中?接下来,在Python3中,你会说reduce不再是“核心”了。

  回复:有不确定性。数据集中的IRL不可能像我提供的数据那样显著变化。相反,因为是随时间变化的流量,所以合并不完全,“第10天变化加减2天”的可能性很大。

  这是你的数据图表。

  我们需要找到两种倾向。首先,求两点之间的斜率。使用数字。

  将numpy作为np导入

  x=NP.array ([ 1,2,3,4,5,6,7,8,9,10 ],dtype=np.float)()()))))).

  y=NP.array ([ 1,2,3,4,5,6,8,10,12,14 ],dtype=np.float)))).

  m=NP.diff(y )/np.diff(x ) (x))。

  是打印(m)

  #1.1.1.1.1.2.2.2.]

  很明显,在第六个区间(6点到7点之间),斜率会从1变成2。然后对这个数组求导,告诉你斜率什么时候变:

  Print (NP.diff) (m))

  [ 0.0.0.0.1.0.0.0.]。

  要搜索非零值的索引:

  idx=NP。非零(NP.diff(m ) ) [0]

  是打印(idx)

  # 4。

  取x的导数,在python中,索引从零开始,所以idx 2表示6点前后斜率不同。

  我想这就是我想要的——谢谢!我觉得这个在安排上比较好处理,所以想不出怎么处理。

  听到这个消息我很高兴!别忘了接受它作为回答!)

  当然可以。因为我只是想知道,IRL,我用的数据没有这个例子那么完美。——那是通量测量,过几天就会变,所以答案是‘斜率变化是第10天,正负2天。’我怀疑是。你知道有一个巧妙的计算方法吗?谢谢大家!

  有几个小样本数据可以修改这个答案。但是,你以为NP.diff(m)在某个时间区间是零吗?

  梯度可以计算为点之间的差(一阶导数)。然后检查斜率变化的位置【二阶导数】。如果它改变,则索引位置被附加到idx。即梯度变化点的集合。

  请注意,第一点没有唯一的斜率。第二个点提供了斜率,但是需要第三个点来测量斜率的变化。

  idx=[]

  prior _ slope=float(y[1]-y[0])/(x[1]-x[0])

  forninrange(2,len ) x ) : #从第三对点开始.

  slope=float(y[n]-y[n-1])/(x[n]-x[n-1]))

  如果坡!=先验斜率:

  idx.append .

  先验斜率=斜率

  索引文件

  [6]

  当然,这在熊猫和麻木的环境中可能更有效,但我们可以为您提供一个简单的python 2解决方案。

  简单理解条件列表应该也是相当有效的,但是比较难理解。

  idx=[nforninrange(2,Len ) x ] ]

  if float(y[n]-y[n-1])/(x[n]-x[n-1])

  !=float(y[n-1]-y[n-2])/)/(x[n-1]-x[n-2])] .

  所以,我没有意识到有必要指定麻木和熊猫能做什么。你如何使用它?只是好奇。

  我不确定你想要什么,但是这样你可以看到进化的过程(导数):

  y=[ 1,2,3,4,5,6,8,10,12,14 ]

  dy=[y[i1]-y[I]for iinrange(len(y)-1)]

  迪伊

  [ 1,1,1,1,1,2,2,2 ]

  然后求变点(二阶导数)。

  dpy=[dy[i1]-dy[I]for iinrange(len(dy)-1)]

  单片机学习资料

  [ 0,0,0,0,1,0,0,0 ]

  数字

  如果需要该点的索引:

  dpy.index(1)).

  四

  这允许您在坡度改变之前指定最后一点的值。

  change=dpy.index(1))

  y[改变]

  5。

  在你的y=[1,2,3,4,5,6,8,10,12和14]中,变化发生在索引[4]处。索引从0开始。此时y的值为5。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: