#python #numpy
Вопрос:
def sec_order_1(t,a0,k): # 2a -gt; c return a0/(a0*k*t 1) a0=10; k=1 t=np.array(time_seconds) data=np.array(concentrations_mM) calc_y=sec_order_1(t,a0,k) plt.plot(t, data,'o', label='data') plt.plot(t, calc_y, label='model, k: %g' %k) plt.xlabel('time / seconds'); plt.ylabel('concentration_mM') plt.legend(); plt.show() from scipy.optimize import curve_fit import numpy as np f=sec_order_1(t,a0,k) xdata = t ydata=data/a0 p0=1 popt,pcov = curve_fit(f,xdata, ydata,p0=p0) print(popt,pcov) ydata = a0*f(xdata,*popt) plt.plot(t,data,'o') plt.plot(xdata,ydata, label='Best-fit k: %.3f ± %.3f / week' % (popt[0], perr))
Этот код пытается сделать строку наиболее подходящей. Я перепробовал много решений, которые, как я видел, другие люди использовали для этой ошибки, но мне нужна более конкретная помощь. Если какой-либо из моих кодов странный, я приношу извинения, я просто пытаюсь использовать шаблон, который дал нам наш профессор, но у него не было этой проблемы, несмотря на то, что я изо всех сил старался скопировать его.
Комментарии:
1. Покажите полную обратную трассировку ошибки в виде правильно отформатированного текста в вопросе.
2. Трудно понять, что вызывает ошибку, не зная, где она находится. Ваш код не является самодостаточным. так что каждая попытка была бы слепой догадкой
3.
sec_order_1
возвращает массив,f=sec_order_1(t,a0,k)
-gt; gt;ydata = a0*f(xdata,*popt)
. Массив не может быть вызван. Что вы собирались здесь делать?4. Мое первое слепое предположение было бы следующим: после того, как вы построите
ydata = ..
там, вы позвонитеf(xdata,*popt)
, ноf
это должен быть массив, потому что вы назначили его как возврат вашей функции
Ответ №1:
Вы получаете numpy.ndarray is not callable
, потому что где-то в вашем коде вы вызываете numpy.ndarray
Ваша функция sec_order_1
возвращает массив numpy.
Во втором блоке кода вы присваиваете переменной массив numpy, возвращаемый sec_order_1
переменной f
. Позже вы сделаете f(xdata,*popt)
то, что является источником вашей славы.