Python 从返回NumPy数组的循环中收集结果

Python 从返回NumPy数组的循环中收集结果,python,numpy,Python,Numpy,我是一个公认的非常基础的Python程序员,在遇到实现各种研究问题时,我会努力学习。我遇到了其中的一个问题——特别是,如何处理循环,在循环中我返回一堆数据,而不是通常的“输出一个数字”示例,在这些示例中,您只需将循环的结果添加到前面的所有内容中 以下是我尝试运行的未加载脚本的要点: 真正突出的一点是model_solve函数的结尾: def model_solve(t): # lots of variables set params = np.zeroes((n_steps,n_

我是一个公认的非常基础的Python程序员,在遇到实现各种研究问题时,我会努力学习。我遇到了其中的一个问题——特别是,如何处理循环,在循环中我返回一堆数据,而不是通常的“输出一个数字”示例,在这些示例中,您只需将循环的结果添加到前面的所有内容中

以下是我尝试运行的未加载脚本的要点:

真正突出的一点是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
)的结果,以及一个简单的“What time step What we on?”计时器和两列以4950行和7列NumPy数组的形式多次重复的两个随机变量的值

然而,目标是对具有随机值的两个参数(β和γ)进行蒙特卡罗分析。本质上,我想做一个循环函数,有点像这样:

def loop_function(runs):
  for i in range(runs):
    model_solve(100)
    # output of those model_solves collected here
  # return collected output
然后将收集的输出写入文件。通常,我只需要让每个model_solve函数将其结果写入一个文件,但这段代码将在其他平台上运行,在结果返回到本地计算机之前,我不一定能够写入文件。相反,我试图返回一个巨大的NumPy数组
runs
*7列4950行,然后可以将其写入本地计算机上的文件


有关如何处理此问题的任何线索?

使用列表保存所有结果:

results = []
for i in range(runs):
    results.append(model_solve(100))
然后通过以下方式获取输出数组:

np.hstack(results)

实际上,如果您的代码有一个更大的循环,您应该始终尝试将问题矢量化。 如果速度很重要,你应该知道“for loops”是一个瓶颈。此外,追加操作非常慢,需要更多内存,因为它会创建副本。因此,更好的解决方案应该是:

results = [0]*runs # if you want to use lists...

[model_solve(100) for x in results] # do see list comprehension in python 
除了使用列表,您还可以直接使用数组来存储结果:

resutls=np.zeros([numberOfRuns,ShapeOfModelResults])

for i in range(numberOfRuns):
    results[numberOfRuns,modelSolve(100)] # this will put the result directly in the matrix

我希望我的回答能帮助您编写更快、更清晰的代码

您是在尝试读取Python函数返回的numpy数组,还是如何将Python函数的结果写入文件?@DK如何获取Python函数返回的许多numpy数组,并将它们组合成一个数组。嗯,这太简单了。刚刚做了一个概念验证,这个答案似乎有效,所以我接受了。哪种技术在处理大数据时更高效、更快?如果我们需要循环,有没有办法避免for循环?在python中,列表理解稍微快一点