Как я могу положить массив в экспоненте - PullRequest
0 голосов
/ 21 января 2020

Я пытаюсь подогнать некоторые данные к гауссовой функции. Я пытаюсь сделать это с помощью функции optomize.curve_fit. Я не могу поместить свои данные в math.exp (). Как я могу обойти это?

def func(xdata, a,b, c):
    return a*math.exp(-((xdata-b)**2)/2*c**2)

plt.plot(xdata, ydata, 'ro', label="original data")

popt, pcov = optimize.curve_fit(func, xdata, ydata, maxfev=1000000)
plt.plot(xdata, func(xdata, *popt), label="Fitted Curve")
plt.legend(loc='upper left')
plt.show()

Ответы [ 2 ]

0 голосов
/ 21 января 2020

Попробуйте:

import numpy as np

def func(xdata, a, b, c):
    return a * np.exp(-((xdata-b)**2)/2*c**2)

, если ваши данные не являются массивом numpy, попробуйте xdata = np.array(xdata)

0 голосов
/ 21 января 2020

Вот как:

result = np.zeros(len(xdata))

def func(xdata, a,b, c):
    for x in range(len(xdata)):
        result[x] = a*math.exp(-((x-b)**2)/2*c**2)
    return result
plt.plot(xdata, ydata, 'ro', label="original data")

popt, pcov = optimize.curve_fit(func, xdata, ydata, maxfev=1000000)
plt.plot(xdata, func(xdata, *popt), label="Fitted Curve")
plt.legend(loc='upper left')
plt.show()

ура!

...