में इन्फ्लिक्शन पॉइंट ढूंढ रहा है मेरे पास कुछ आयामी डेटा है और इसे एक स्पलीन के साथ फिट किया गया है। फिर मैं इसमें इन्फ्लिक्शन पॉइंट्स (सैडल पॉइंट्स को अनदेखा करना) ढूंढना चाहता हूं। अब मैं splev द्वारा उत्पन्न कई मूल्यों पर scipy.signal.argrelmin (और argrelmax) का उपयोग कर अपने पहले व्युत्पन्न की अतिरेक खोज रहा हूं।स्पिनलाइन 1 डी डेटा
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()
लेकिन यह बहुत गलत लगता है। मुझे लगता है कि इतने सारे मूल्य पैदा किए बिना मैं जो खोज रहा हूं उसे ढूंढने की संभावना है। स्पूट की तरह कुछ लेकिन संभवतः दूसरे व्युत्पन्न पर लागू होता है?
सकारात्मक
यहाँ यह करने के लिए कोड है। ;-) –