我做了很多ODE模拟,并使用了一些python参数优化工具(例如。scipy.optimize.minimize.最小化,需要以列表形式传递参数。这使得它们非常麻烦,因为我必须将参数称为params[0]
、params[1]
等,而不是更直观的名称,这些名称实际上描述了它们在模拟中的角色。到目前为止,我的解决方案大致如下:
k1 = 1.0
k2 = 0.5
N = 0.01
params = [k1,k2,N]
def sim(params,timerange):
k1 = params[0]
k2 = params[1]
N = params[2]
# run the simulation
这真是胡思乱想,令人不满意的原因有很多。每当我需要向模拟中添加新的参数时,我必须修改params列表并更改如何在simulate函数中手动解包列表;在每一轮模拟中创建新的引用都会浪费一些时间,等等
我想知道是否有一个合理的、非kludgey的解决方案:用名称定义参数,将它们作为列表传递给函数,然后在列表中用相同的名称引用它们。在
我通常按照乔兰在回答中的建议做:
但你也可以这样做:
^{pr2}$(至少,这在Python2.7中是可行的。我用}测试了这个想法,效果很好。例如,在下面的代码中,可以使用}作为
scipy.integrate.odeint
、scipy.integrate.ode
和{cost
或{minimize
的第一个参数:我想是你想要的。。,。。如果你添加了一个额外的参数,你只需要在N。。。但这不是一个可选的论点
或者更好
^{pr2}$相关问题 更多 >
编程相关推荐