函数内部exec()中定义的子函数的变通方法

2024-06-02 06:15:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个需要包含子函数的函数,以便从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数据帧中拥有多少变量。提前谢谢你的建议


Tags: 数据函数formmoddatareturndefnp