加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 在样条拟合1d数据中找到拐点

发布时间:2020-12-16 21:51:01 所属栏目:Python 来源:网络整理
导读:我有一些一维数据,并与样条拟合.然后我想在其中找到拐点(忽略鞍点).现在我通过在splev生成的很多值上使用scipy.signal.argrelmin(和argrelmax)来搜索其第一个派生的极值. import scipy.interpolateimport scipy.optimizeimport scipy.signalimport numpy as

我有一些一维数据,并与样条拟合.然后我想在其中找到拐点(忽略鞍点).现在我通过在splev生成的很多值上使用scipy.signal.argrelmin(和argrelmax)来搜索其第一个派生的极值.

import scipy.interpolate
import scipy.optimize
import scipy.signal
import numpy as np
import matplotlib.pyplot as plt
import operator

y = [-1,5,6,4,2,8,1]
x = np.arange(0,len(y))
tck = scipy.interpolate.splrep(x,y,s=0)

print 'roots',scipy.interpolate.sproot(tck)
# output:
# [0.11381478]

xnew = np.arange(0,len(y),0.01)
ynew = scipy.interpolate.splev(xnew,tck,der=0)

ynew_deriv = scipy.interpolate.splev(xnew,der=1)

min_idxs = scipy.signal.argrelmin(ynew_deriv)
max_idxs = scipy.signal.argrelmax(ynew_deriv)
mins = zip(xnew[min_idxs].tolist(),ynew_deriv[min_idxs].tolist())
maxs = zip(xnew[max_idxs].tolist(),ynew_deriv[max_idxs].tolist())
inflection_points = sorted(mins + maxs,key=operator.itemgetter(0))

print 'inflection_points',inflection_points
# output:
# [(3.13,-2.9822449358974357),#  (5.03,4.3817785256410255)
#  (7.13,-4.867132628205128)]

plt.legend(['data','Cubic Spline','1st deriv'])
plt.plot(x,'o',xnew,ynew,'-',ynew_deriv,'-')
plt.show()

但这感觉非常错误.我想有可能在没有产生这么多价值的情况下找到我要找的东西.像sproot这样的东西,但也许适用于二次推导?

最佳答案
因此,您可以首先在样条拟合样条,然后使用导数公式构造导数样条的系数,最后使用样条根寻找得到导数样条的根.这些是原始曲线的最大值/最小值.

这是代码:https://gist.github.com/pv/5504366

系数的相关计算是:

t,c,k = scipys_spline_representation
# Compute the denominator in the differentiation formula.
dt = t[k+1:-1] - t[1:-k-1]
# Compute the new coefficients
d = (c[1:-1-k] - c[:-2-k]) * k / dt
# Adjust knots
t2 = t[1:-1]
# Pad coefficient array to same size as knots (FITPACK convention)
d = np.r_[d,[0]*k]
# Done,a new spline
new_spline_repr = t2,d,k-1

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读