如前所述,我在将函数拟合到循环中的数据时遇到了一个问题。这是dataframe中的groupby对象。此groupby对象具有以下结构:
f [MHz] T [K] Rs
0 400 1.75 13.472493
1 400 2.00 14.054298
2 400 2.25 14.900821
3 400 2.50 16.453007
4 400 2.75 18.050460
13 800 1.75 36.008499
14 800 2.00 37.924344
15 800 2.25 41.246962
16 800 2.50 45.780308
17 800 2.75 51.904333
26 1200 1.75 53.809458
27 1200 2.00 61.427391
28 1200 2.25 67.438682
29 1200 2.50 75.302240
30 1200 2.75 88.015202
现在,我想对每个频率组(400、800和1200)应用一个拟合,并在一个循环中高效地执行此操作。第一次尝试是:
^{pr2}$我从0运行到2来创建T1、Rs1、T2、Rs2等等。该条件将T值限制在某个范围内,这似乎可以正常工作。但是,我无法将曲线拟合程序正确地应用于所有三个频率组-它引发了以下错误:
ValueError Traceback (most recent call last)
<ipython-input-14-0b3b4adc65e7> in <module>()
24 i = 0
25 for freq, grp1 in RT1.groupby(['f [MHz]']):
---> 26 T[i] = grp1['T [K]'].values[condition]
27 Rs[i]= grp1['Rs'].values[condition]
28 popt[i], pcov[i] = curve_fit(RsT, T[i], Rs[i], p0)
ValueError: setting an array element with a sequence.
问题是,我没有为每个组分配三个不同的T和Rs数组-我希望T1和Rs1的值为400mhz,T2和Rs2的值为800mhz,依此类推。另外,popt和pcov应分别计算三次(popt1,pcov1;pop2,pcov2;…),分别对应于每个数据组的单独拟合。 我希望,有人可以解释,如果有可能在一个循环中应用曲线拟合程序,如果可以-怎么做。 非常感谢!在
听起来
T
和RsT
都是非对象数据类型的numy数组。试图为T
的一个单元格分配一个值数组会引发您看到的ValueError:可以使用object dtype数组
^{pr2}$但是对象数组并不是特别快;您可以制作}列表。在
T
和{相关问题 更多 >
编程相关推荐