我正在编写一个需要包含子函数的函数,以便从scipy.optimize
模块运行curve_fit
函数。问题是进入子函数(我们称之为fitFunc
)的变量数量取决于输入到主函数的数据帧中有多少列。下面是我的代码:
def function(mod_data):
import numpy as np
i = 0
ps = len(mod_data.columns) - 7
temp = '(xdat[0]**b)'
while i != (ps-1):
dummypy = '(xdat[' + str(i+1) + ']'
temp = temp + '+' + dummypy + '**b)'
i += 1
xdat = mod_data.iloc[:,7:].values
xdat = np.transpose(xdat)
ydat = mod_data.iloc[:,1].values
form = 'def fitFunc(xdat, a, b): return (a/ps) * (%s)' % temp
exec(form)
result = curve_fit(fitFunc, xdat, ydat,
p0 = np.array([100000,.75]))
return result
上面的mod_data
是包含建模过程变量的数据帧^{<如果xdat
分别有两行或三行,则cd5>}应为以下字符串:
# xdat has 2 rows
form = 'def fitFunc(xdat, a, b): return (a/ps) * ((xdat[0]**b)+(xdat[1]**b))'
# xdat has 3 rows
form = 'def fitFunc(xdat, a, b): return (a/ps) * ((xdat[0]**b)+(xdat[1]**b)+(xdat[2]**b))'
我意识到我可以定义函数,但问题是,在数据帧被输入函数之前,我不知道数据帧中实际有多少个变量,所以我遍历最后的列以找到那个数字,然后让代码根据变量的数量为我编写函数
从前面的问题中我知道exec
在函数中有子函数时不起作用:Why doesn't exec work in a function with a subfunction?。因此,我在这里的目标是找到另一种方法来定义fitFunc
子函数,这取决于xdat
将从mod_data
数据帧中拥有多少变量。提前谢谢你的建议
不需要动态创建函数并使用
exec
。只需在xdat
上迭代即可相关问题 更多 >
编程相关推荐