Wie finde ich 50% Punkt nach Kurvenanpassung mit numpy

Ich habe numpy in python verwendet, um meine Daten zu einer sigmoidalen Kurve zu passen. Wie finde ich die vaue für X bei y = 50% Punkt in der Kurve, nachdem die Daten an die Kurve angepasst sind

enter code here`import numpy as np enter code here`import pylab from scipy.optimize import curve_fit def sigmoid(x, x0, k): y = 1 / (1 + np.exp(-k*(x-x0))) return y xdata = np.array([0.0, 1.0, 3.0, 4.3, 7.0, 8.0, 8.5, 10.0, 12.0]) ydata = np.array([0.01, 0.02, 0.04, 0.11, 0.43, 0.7, 0.89, 0.95, 0.99]) popt, pcov = curve_fit(sigmoid, xdata, ydata) print popt x = np.linspace(-1, 15, 50) y = sigmoid(x, *popt) pylab.plot(xdata, ydata, 'o', label='data') pylab.plot(x,y, label='fit') pylab.ylim(0, 1.05) pylab.legend(loc='best') pylab.show() 

One Solution collect form web for “Wie finde ich 50% Punkt nach Kurvenanpassung mit numpy”

Sie müssen nur die Funktion lösen, die Sie für y(x) = 0.50 . Sie können eines der Wurzel-Finding-Tools von scipy verwenden , obwohl diese nur für null lösen, also müssen Sie Ihre Funktion einen Offset geben:

 def sigmoid(x, x0, k, y0=0): y = 1 / (1 + np.exp(-k*(x-x0))) + y0 return y 

Dann ist es nur eine Frage des Aufrufs der Wurzelfindungsmethode der Wahl:

 from scipy.optimize import brentq a = np.min(xdata) b = np.max(xdata) x0, k = popt y0 = -0.50 solution = brentq(sigmoid, a, b, args=(x0, k, y0)) # = 7.142 

Zusätzlich zu deinem Kommentar:

Mein Code oben verwendet das ursprüngliche popt , das mit Ihrem Code berechnet wurde. Wenn Sie die Kurvenanpassung mit der aktualisierten sigmoid (mit dem Offset) durchführen, enthält popt auch einen passenden Parameter für y0 .

Wahrscheinlich willst du das nicht … du willst die Kurve für y0=0 . Dies kann durch die Bereitstellung einer Vermutung für die curve_fit mit nur zwei Werten erfolgen. Auf diese Weise wird der Vorgabewert für y0 der Sigmoidfunktion verwendet:

 popt, pcov = curve_fit(sigmoid, xdata, ydata, p0 = (1,1)) 

Alternativ, einfach deklarieren zwei separate Sigmmoid-Funktionen, eine mit dem Offset und eine ohne sie.

  • Setzen Sie Werte in numpy Array auf NaN nach Index
  • Null Zeilen entfernen 2-D numpy array
  • Konvertieren von Pandas Dataframe-Typen
  • So führen Sie einen einzelnen Vorgang auf Mehrere Spalten von Dataframe durch
  • Python spaltete eine Liste der Datumsangaben nach Jahr + Monat
  • Lineare Regression von Arrays mit NANs in Python / Numpy
  • Wie kann ich eine Liste innerhalb eines numpy 2d Arrays speichern?
  • Sehr schnelle Probenahme von einem Satz mit fester Anzahl von Elementen in Python
  • Fmin_cg: Gewünschter Fehler nicht unbedingt durch Präzisionsverlust erreicht
  • Extrahieren oberen / unteren dreieckigen Teil einer numpy Matrix?
  • Tägliche Daten, Probe alle 3 Tage, berechnen über Schleppen 5 Tage effizient
  • Python ist die beste Programmiersprache der Welt.