Я все время становлюсь тупым.ndarray не вызывается, и я не вижу, в чем дело

#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) то, что является источником вашей славы.