我正在运行一些模拟,将一个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,:])