我是公认的非常基本的Python程序员,尝试在实现各种研究问题的过程中学习。而且我遇到了其中一个问题- 特别是如何处理循环,在该循环中我要返回一堆数据,而不是通常的“单数输出”示例,您只需将循环结果添加到之前的所有内容中。
这是我要运行的未循环脚本的要点:https ://gist.github.com/1390355
真正的重点是model_solve函数的结尾:
def model_solve(t): # lots of variables set params = np.zeroes((n_steps,n_params) params[:,0] = beta params[:,1] = gamma timer = np.arange(n_steps).reshape(n_steps,1) SIR = spi.odeint(eq_system, startPop, t_interval) output = np.hstack((timer,SIR,params)) return output
这将返回ODE集成位(spi.odeint)的结果以及一个简单的“我们在什么时间步?” 计时器和本质上是两列的两个随机变量的值重复很多很多次,形式为4950行和7列NumPy数组。
spi.odeint
但是,目标是对两个具有随机值的参数(β和γ)进行蒙特卡洛分析。本质上,我想制作一个像这样循环的函数:
def loop_function(runs): for i in range(runs): model_solve(100) # output of those model_solves collected here # return collected output
然后将收集到的输出写入文件。通常,我只会让每个model_solve函数将其结果写入文件,但是此代码将在PiCloud或其他平台上运行,在这些平台上,我不一定要编写文件,直到结果返回到本地机器。相反,我试图返回runs* 7列和4950行的巨大NumPy数组-然后可以将其写入本地计算机上的文件中。
runs
关于如何解决这个问题的任何线索?
使用列表保存所有结果:
results = [] for i in range(runs): results.append(model_solve(100))
然后通过以下方式获取输出数组:
np.hstack(results)