在嵌套循环中重置数组,同时在每次迭代时保存数组

时间:2017-03-10 10:06:52

标签: python arrays loops numpy copy

我正在运行一些模拟,将一个numpy数组作为输入,继续几次迭代,直到满足某些条件(随机),然后使用相同的起始数组再次重复。每个完整的模拟都以相同的阵列开始,并且事先不知道完成每个模拟的步骤数(但是可以对其进行限制,maxt)。

我希望在每次模拟之后保存数组(X),最好是在大型多维数组中。下面我将每个模拟输出保存在列表中,并使用copy.copy保存数组。我很欣赏我可以使用的其他方法(例如使用元组)所以在Python中有更有效的方法吗?

注意:我很欣赏这是一个简单的例子,可以对下面的代码进行矢量化。然而,在使用的实际应用中,我必须使用循环,因为以更复杂的方式引入随机性。

import numpy as np, copy
N = 10
Xstart = np.zeros(N)
Xstart[0] = 1

num_sims = 3
prob = 0.2
maxt = 20

analysis_result = []

for i in range(num_sims):

    print("-------- Starting new simulation --------")
    t = 0
    X = copy.copy(Xstart)

    # Create a new array to store results, save the array
    sim_result = np.zeros((maxt, N))
    sim_result[t,:] = X

    while( (np.count_nonzero(X) < N) & (t < maxt) ):
        print(X)

        # Increment elements of the array stochastically
        X[(np.random.rand(N) < prob)] += 1

        # Save the array for time t
        sim_result[t,:] = copy.copy(X)
        t += 1

    print(X)
    analysis_result.append(sim_result[:t,:])

0 个答案:

没有答案