我正在使用Python运行地下水模型,我的问题如下:
我有三个地下水模型存储在列表Model_Names慢,中,快
每个模型都有不同的属性和不同的模型名,即
我的脚本为特定于每个模型名称的模型生成输入文件。
我正在连续运行这三种型号,每种型号运行5次,总共运行15次。
每次都会产生地下水位。
除了每个模型的第一次运行(其中设置了级别)外,
在下一次仿真中,将先前的仿真设置为起始级别。即慢(I)=慢速(i-1)中的模拟水平。
但是,我不想使用来自不同模型的模拟级别。
即。我不希望在慢速含水层中模拟的水位为介质含水层模拟提供信息。
因此,我试图编写一个for循环,它将检查模型名是否等于前一个模型名。
然后确定要使用哪些输入文件。
但是,我在计算要使用的代码时遇到了问题,该代码指定了循环的前一次迭代。
我尝试了以下代码,其中我希望打印当前的模型名,并将其与
for m, modelname in enumerate(Model_Name):
print('Model Name = ' +modelname)
if m!=0 and modelname == Model_Name[m-1]:
print ('** STARTING HEAD INPUT FILE UPDATED WITH HEADS FROM PREVIOUS SIMULATION')
else:
print('** STARTING HEAD INPUT FILE BUILT ') 但是它将模型名(I)和模型名(i-1)进行了三次比较,因为它循环了整个Model_Names长度。
我希望它只检查模型名称(I)、==模型名(i-1)是否在每个模型运行时运行一次,而不是循环整个Model_Names长度。是否有一种方法可以检查每个模型的模型名称,而不通过Model_Names循环运行?
我还试着用
while modelname == modelname[i-1]:我找不到任何参考资料
我想做的事。
对不起,我应该提到for循环嵌套在另一个for循环中:
Lag_times = [0.0000864, 0.000864, 0.00864]
Manage_Freq = [30, 183, 365, 730, 1825, 3650, 18250]
Model_Name = ['SLOW', 'MEDIUM', 'FAST']
# Loop through each model variable, build and run model
for i, j in zip (Lag_times, Model_Name):
hk = i # set hydraulic conductivity
modelname = j
for k in Manage_Freq:
Freq = k
# The code in here builds and runs model然后,我想检查模型运行的模型名是否等于前面的#modelname
if modelname !=0 and modelname == Model_Name[modelname-1]:
print (' STARTING HEAD INPUT FILE UPDATED WITH HEADS FROM PREVIOUS SIMULATION')
else:
print('** STARTING HEAD INPUT FILE BUILT ') 我不认为我需要循环遍历Model_Names,但是如果不使用Model_Names,我就无法确定输入什么代码来检查modelname(i) == modelname(i-1)。
发布于 2016-10-27 01:08:27
我想你有点搞不懂enumerate是干什么的。循环将运行三次。
(假设为ModelNames==['Slow','Med','Fast'])
所以modelname == ModelNames[m-1]永远是True!
试着写下你真正想要做的事情,代码就会自己写出来:
对于每一个模型,你想做5次。第一次运行将具有一些特殊的初始参数,但下一次运行将具有上一次运行中的参数。
您的代码应该如下所示:
for model in ModelNames: # do something for each model
params=None #initialize parameters to none meaning they're not set yet
for i in range(5): #do 5 iterations
if params is None: #have we gotten new starting parameters?
params=get_initial_params(model) #figure out the ones for the first run
output=run_simulation(model,params) #do your simulation
params=get_next_params(output) #get the next parametershttps://stackoverflow.com/questions/40274332
复制相似问题