在我的水文学学位中,我使用Python创建了一个核心模型以使用if语句等来计算流量值。然后,我使用该核心模型以相同的程序来计算我所在地区使用不同参数的不同土地利用中的流量每种土地用途。当我运行模型时,我得到的错误操作数不能与形状(730,)(1095,)一起广播。我在这里发布一些代码,使其更易于理解。
def model_core(rainfall, pet, fieldcap, evapres,rootd, gtcond, soilcond, soilsat, soilstor, gtstor):
for i in range (len(rainfall)):
soilstor = soilstor + p
if soilstor > soilsat:
overlandflow = soilstor - soilsat
soilstor = soilstor - overlandflow
if overlandflow > (ae * evapres): #!!! because the same value of evaporation cant have the same effect on moving and stagnant water
overlandflow = overlandflow - ae * evapres
else:
overlandflow = 0
else:
overlandflow = 0
#!!! is it correct to use AE for cases of either evaporation or transpiration
if soilstor > ae: # transpiration process
soilstor = soilstor - ae # the plants absorb some of the water with their root system thus removing it
else: # from the current system
soilstor = 0
if soilstor > fieldcap:
interflow = interflowct * (soilstor - fieldcap)
soilstor = soilstor - interflow
else:
interflow = 0
if soilstor > rootd:
percolation = (soilstor - rootd) * soilcond
soilstor = soilstor - percolation
gtstor = gtstor + percolation
baseflow = gtstor * gtcond
gtstor = gtstor - baseflow
else:
percolation = 0
baseflow = gtstor * gtcond
gtstor = gtstor - baseflow
simflow = overlandflow + interflow + baseflow
new_flow.append(simflow)
return(np.array(new_flow))
def model(rainfall, pet, parameters.....):
wood_flow = model_core(rainfall*woodcover, pet*woodcover*woodaepe, rootd*woodrootd, fieldcap, evapres, gtcond, soilcond , soilsat, soilstor, gtsat, gtstor)
grass_flow = model_core(rainfall*grasscover, pet*grasscover*grassaepe, rootd*grassrootd, fieldcap, evapres, gtcond, soilcond, soilsat, soilstor, gtsat, gtstor)
arable_flow = model_core(rainfall*arabcover, pet*arabcover*arabaepe, rootd*arabrootd, fieldcap, evapres, gtcond, soilcond, soilsat, soilstor, gtsat, gtstor)
urban_flow = model_core(rainfall*urbancover, pet*urbancover*urbanaepe, rootd*urbanrootd, fieldcap, evapres, gtcond, soilcond, soilsat, soilstor, gtsat, gtstor)
totalFlow = wood_flow + grass_flow + arable_flow + urban_flow
return(totalFlow)
results = model(rain_df.rainfall_mm["1990"].values, pet_df.pet_mm["1990"].values, parameters...)
coreResult = model_core(rain_df.rainfall_mm["1990"].values, pet_df.pet_mm["1990"].values, 0.3, 0.4, 1, 0.5, 0.2, 200, 100, 200)
#plt.plot(coreResult)
results = model(rain_df.rainfall_mm["1990"].values, pet_df.pet_mm["1990"].values, 0.3, 0.4, 1, 0.5, 0.2, 200, 100, 200)
ValueError
Traceback (most recent call last)
<ipython-input-30-658bdb232e16> in <module>
98 #plt.plot(coreResult)
99
--> 100 results = model(rain_df.rainfall_mm["1990"].values, pet_df.pet_mm["1990"].values, 0.05, 0.20, 0.35, 0.40, 0.95, 0.6, 0.4, 0.15, 1.7, 0.8, 0.5, 0.1, 0.3, 0.4, 1, 0.5, 0.2, 200, 100, 200)
<ipython-input-30-658bdb232e16> in model(rainfall, pet, woodcover, grasscover, arablecover, urbancover, woodaepe, grassaepe, arableaepe, urbanaepe, woodrootd, grassrootd, arablerootd, urbanrootd, fieldcap, evapres, rootd, gtcond, soilcond, soilsat, soilstor, gtstor)
91 urban_flow = model_core(rainfall*urbancover, pet*urbancover*urbanaepe, rootd*urbanrootd, fieldcap, evapres, gtcond, soilcond, soilsat, soilstor, gtstor)
92
---> 93 totalFlow = wood_flow + grass_flow + arable_flow + urban_flow
94
95 return(totalFlow)
ValueError: operands could not be broadcast together with shapes (730,) (1095,)