나는 1 차원 데이터를 가지고 있으며 스플라인으로 맞 춥니 다. 그런 다음 굴곡 점 (안장 점을 무시함)을 찾으려고합니다. 이제 splev가 생성 한 많은 값에 scipy.signal.argrelmin (및 argrelmax)을 사용하여 첫 번째 파생어를 극한값으로 검색하고 있습니다.스플라인 장착 된 1d 데이터의 변곡점 찾기
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, 5, 8, 5, 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, tck, 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, y, 'o',
xnew, ynew, '-',
xnew, ynew_deriv, '-')
plt.show()
하지만이 느낌은 대단히 잘못되었습니다. 나는 많은 가치를 창출하지 않으면 서 내가 찾고있는 것을 발견 할 가능성이 있다고 생각한다. sproot와 같은 것이지만 아마 두 번째 파생에 적용 할 수 있을까요?
긍정 여기
이를 수행하기위한 코드이다. ;-) –