gpt4 book ai didi

python - 函数内部 exec() 中定义的子函数的解决方法

转载 作者:行者123 更新时间:2023-12-01 07:52:43 24 4
gpt4 key购买 nike

我正在编写一个需要包含子函数的函数,以便从 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分别有两行或三行,form应为以下字符串:

# 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 子函数,具体取决于 xdatmod_data 数据帧中获得的变量数量。预先感谢您的任何建议。

最佳答案

无需动态创建函数并使用exec。只需迭代 xdat

def fitFunc(xdat, a, b):
return (a/ps) * sum(x**b for x in xdat)

关于python - 函数内部 exec() 中定义的子函数的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56118603/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com