Code explanation fit mithilfe einer Klasse
Verfasst: Mittwoch 1. August 2018, 14:05
Könnte mir bitte jemand diesen Code erklären ?
import numpy as np
from scipy import optimize
class Parameter:
def __init__(self, value):
self.value = value
def set(self, value):
self.value = value
def __call__(self):
return self.value
def fit(function, parameters, y, x = None):
def f(params):
i = 0
for p in parameters:
p.set(params)
i += 1
return y - function(x)
if x is None: x = np.arange(y.shape[0])
p = [param() for param in parameters]
return optimize.leastsq(f, p)
So wird er dann aufgerufen ;
# giving initial parameters
mu = Parameter(7)
sigma = Parameter(3)
height = Parameter(5)
# define your function:
def f(x): return height() * np.exp(-((x-mu())/sigma())**2)
# fit! (given that data is an array with the data to fit)
data = 10*np.exp(-np.linspace(0, 10, 100)**2) + np.random.rand(100)
print fit(f, [mu, sigma, height], data)
Wie Klassen funktionieren verstehe ich im Allgemeinen.
Was ich nicht verstehe sind die Schleifen mit den params und warum f(params)
Die Parameter werden ja als Objekte verwendet , die dann zum optimalen Fitten der Funktion angewendet werden sollen .
Wäre toll, wenn mir jemand helfen könnte !
import numpy as np
from scipy import optimize
class Parameter:
def __init__(self, value):
self.value = value
def set(self, value):
self.value = value
def __call__(self):
return self.value
def fit(function, parameters, y, x = None):
def f(params):
i = 0
for p in parameters:
p.set(params)
i += 1
return y - function(x)
if x is None: x = np.arange(y.shape[0])
p = [param() for param in parameters]
return optimize.leastsq(f, p)
So wird er dann aufgerufen ;
# giving initial parameters
mu = Parameter(7)
sigma = Parameter(3)
height = Parameter(5)
# define your function:
def f(x): return height() * np.exp(-((x-mu())/sigma())**2)
# fit! (given that data is an array with the data to fit)
data = 10*np.exp(-np.linspace(0, 10, 100)**2) + np.random.rand(100)
print fit(f, [mu, sigma, height], data)
Wie Klassen funktionieren verstehe ich im Allgemeinen.
Was ich nicht verstehe sind die Schleifen mit den params und warum f(params)
Die Parameter werden ja als Objekte verwendet , die dann zum optimalen Fitten der Funktion angewendet werden sollen .
Wäre toll, wenn mir jemand helfen könnte !