【发布时间】:2021-09-22 15:56:44
【问题描述】:
我正在尝试将列表传递到函数的定义中以创建新变量。这里的用例是运行scipy的curve fit来找到函数的最优参数。我希望这个函数能够动态地获取任意数量的变量,而无需专门输入我希望它优化/解决的所有变量(b1、rate_1 等)。现在我有一个要包含的变量列表,但似乎无法让函数将它们创建为函数定义中的新参数,看起来我需要这样做。
如下所示,我熟悉在函数中使用 *,但它似乎是在函数已经定义并且您正在调用它的情况下使用的。我想做一些类似的事情,但在函数的定义中,所以函数本身将 b1、rate_1 等识别为可以使用 curve_fit 求解的参数。
我的入门代码:
def get_optimal_adstock_multivariate(x_var_names):
y = np.array(final_df['Count Of Solutions'])
# make list of coefficient variables (b1, b2, etc.) and make new variables for each rate (rate_1, rate_2, etc.)
coef_vars = []
rates = []
for i in range(0, len(x_var_names)):
coef_vars.append("b" + str(i+1))
rates.append("rate_" + str(i+1))
coef_vars_rates = coef_vars + rates
def f(final_df, b0, *coef_vars_rates): # using * to pass b1, rate_1, b2, rate_2, etc. as parameters (unpacking the list)
# need this function to recognize final_df, b0, b1, rate_1, etc. as variables
【问题讨论】:
-
参见 1.2 usage of **kwargs。这可能就是您正在寻找的。span>
标签: python function optimization scipy scipy-optimize