Я работаю с несколькими DataFrames (здесь я буду использовать только 2 из них в качестве примера). Я хочу выполнить подгонку на основе данных их обоих, используя scipy.optimize.curve_fit
.
В основном, я хочу, чтобы столбцы из фрейма данных с именем ' new_freqs ' были моими x- переменная или независимая переменная, а столбцы из фрейма данных с именем ' Tans ' будут моими значениями y или зависимой переменной. Оба фрейма данных имеют форму (12,6), где первый столбец « new_freqs » (значения x) соответствует первому столбцу « Tans » (y- значения) и т. д.
Я включаю ниже наиболее важную часть кода.
In[1]:
print(type(Tans), Tans.shape)
print(type(new_freqs), new_freqs.shape)
Out[1]:
<class 'pandas.core.frame.DataFrame'> (12, 6)
<class 'pandas.core.frame.DataFrame'> (12, 6)
Я пытаюсь подогнать его под прямую линию
def linear(frequencies,tau):
return 2*np.pi*new_freqs*tau
popt, pcov = scipy.optimize.curve_fit(linear, new_freqs, Tans, p0=None, maxfev=1000)
tau = popt
fit = lambda frequencies: 2*np.pi*new_freqs*tau
fitted = linear(new_freqs,tau)
print(popt, pcov)
Я хотел бы получить прямую линию из подгонки, чтобы построить ее вместе с данными и значениями 'tau' в массиве каждого набора (x, y).
Я получаю эту ошибку :
ValueError: object too deep for desired array
Traceback (most recent call last):
File "\\XXXXXXXXX.py", line 210, in <module>
popt, pcov = scipy.optimize.curve_fit(linear, new_freqs, Tans, p0=None, maxfev=1000)
File "C:\ProgramData\Anaconda3\Lib\site-packages\scipy\optimize\minpack.py", line 763, in curve_fit
res = leastsq(func, p0, Dfun=jac, full_output=1, **kwargs)
File "C:\ProgramData\Anaconda3\Lib\site-packages\scipy\optimize\minpack.py", line 401, in leastsq
gtol, maxfev, epsfcn, factor, diag)
minpack.error: Result from function call is not a proper array of floats.
Буду очень признателен за ваши подсказки и помощь. Заранее спасибо