Набор питона python/scipy
У меня есть несколько моментов, и я стараюсь соответствовать кривой для этих точек. Я знаю, что существует функция scipy.optimize.curve_fit
, но я не понимаю документацию, то есть как использовать эту функцию.
Мои баллы: np.array([(1, 1), (2, 4), (3, 1), (9, 3)])
Может кто-нибудь объяснить, как это сделать?
Ответы
Ответ 1
Я предлагаю вам начать с простого полиномиального соответствия, scipy.optimize.curve_fit
пытается подогнать функцию f
, которую вы должны знать, к набору точек.
Это простой трехмерный полином с использованием numpy.polyfit
и poly1d
, первый выполняет полиномиальное соответствие по методу наименьших квадратов, а второй вычисляет новые точки:
import numpy as np
import matplotlib.pyplot as plt
points = np.array([(1, 1), (2, 4), (3, 1), (9, 3)])
# get x and y vectors
x = points[:,0]
y = points[:,1]
# calculate polynomial
z = np.polyfit(x, y, 3)
f = np.poly1d(z)
# calculate new x and y's
x_new = np.linspace(x[0], x[-1], 50)
y_new = f(x_new)
plt.plot(x,y,'o', x_new, y_new)
plt.xlim([x[0]-1, x[-1] + 1 ])
plt.show()
![enter image description here]()
Ответ 2
Сначала вам нужно отделить свой массив numpy от двух отдельных массивов, содержащих значения x и y.
x = [1, 2, 3, 9]
y = [1, 4, 1, 3]
curve_fit также требует функцию, которая предоставляет тип соответствия. Например, линейная подгонка будет использовать такую функцию, как
def func(x, a, b):
return a*x + b
scipy.optimize.curve_fit(func, x, y)
вернет массив numpy, содержащий два массива: первый будет содержать значения для a
и b
, которые наилучшим образом соответствуют вашим данным, а вторая будет ковариацией оптимальных параметров подгонки.
Здесь приведен пример линейной подгонки с предоставленными вами данными.
import numpy as np
from scipy.optimize import curve_fit
x = np.array([1, 2, 3, 9])
y = np.array([1, 4, 1, 3])
def fit_func(x, a, b):
return a*x + b
params = curve_fit(fit_func, x, y)
[a, b] = params[0]
Этот код вернет a = 0.135483870968
и b = 1.74193548387
Здесь график с вашими точками и линейной подгонкой... который явно плохой, но вы можете изменить функцию фитинга, чтобы получить любой тип приспособления, который вы хотели бы.
![enter image description here]()
Ответ 3
Библиотека подстановки кривой python pyeq2, лицензия BSD доступна в Репозитории Google Code по адресу:
https://github.com/zunzun/pyeq2
Он поставляется со многими примерами, включая параллельное программирование и пользовательские функции, и вы можете попробовать его онлайн бесплатно:
http://zunzun.com
Я автор, поэтому, если у вас есть какие-либо вопросы, напишите мне прямо по электронной почте [email protected] - я сделаю все возможное, чтобы помочь вам и запустить вас с примерами.