我使用Python运行地下水模型 我的问题如下:
我有三个地下水模型存储在Model_Names [SLOW,MEDIUM,FAST]列表中 每个模型都有不同的属性和不同的模型名,即SLOW
我的脚本为特定于每个模型名称的模型生成输入文件
我正在运行三个系列模型,每个模型运行5次,总计15次运行 每次都会产生地下水位。
除了每个模型的第一次运行(设置了级别)之外,模拟的级别为 先前的模拟在下一次模拟中设置为起始级别。 即在SLOW(i)中的起始等级=在慢速(i-1)中的模拟等级
但是,我不想使用不同型号的模拟水平 即。我不希望在SLOW含水层模拟水平来通知MEDIUM含水层模拟。
所以我试着编写一个for循环来检查modelname是否等于以前的modelname 然后确定要使用的输入文件。
但是我在编写使用的代码时遇到问题,该代码指定了循环的先前迭代
我尝试了以下代码,我希望打印当前的模型名称并与
进行比较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 ')
但它将modelname(i)与modelname(i-1)进行了三次比较,因为它循环了Model_Names的整个长度。
我希望它只为每个模型运行检查一次modelnames(i)== modelnames(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
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,但我无法确定输入什么代码来检查modelname(i)== modelname(i-1)而不使用Model_Names。
答案 0 :(得分:0)
我认为您对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 parameters