我编写了一个函数,通过近似两个变量(elev和MaxQ)之间的关系来替换scipy.interp1d,从而加快了我的代码的速度.该方程是四阶多项式.我希望该函数能够为单个输入和一维数组输入计算Q值.功能如下所示.
def CalculateMaxFlow(elev):
size=np.shape(elev)
if size==():
if (elev>367.8): #minimum elev for flow
return -0.00028194553726719*elev**4+0.284027992763652*elev**3-80.3765236558431*elev**2+1900880.72298153
else: return 0
else:
MaxQ=np.zeros(np.shape(elev)[0])
for i in range(np.shape(elev)[0]):
if (elev[i]>367.8): #4th order polynomial. Not exact but okay for speeding up code
MaxQ[i]= -0.00028194553726719*((elev[i])**4)+0.284027992763652*((elev[i])**3)-80.3765236558431*((elev[i])**2)+1900880.72298153
else: MaxQ[i]= 0
return MaxQ
elev1=380
elev5a=380+np.zeros(5)
elev5b=np.asarray([380,380,380,380,380])
Q1=CalculateMaxFlow(elev1)
print("Q1:"+ str(Q1))
Q2=CalculateMaxFlow(elev5a)
print("Q2:"+str(Q2))
Q3=CalculateMaxFlow(elev5b)
print("Q3:"+str(Q3))
答案如下:
Q1:746.828053304
Q2:[ 746.8280533 746.8280533 746.8280533 746.8280533 746.8280533]
Q3:[ 6055481.13713196 6055481.13713196 6055481.13713196 6055481.13713196 6055481.13713196]
问题1和问题2给了我期望的答案.由于某些原因,第三季度没有.我想知道为什么会这样.我在控制台中看到的eleva和elevb之间唯一的区别是a是float64,b是int32.为什么这会改变方程式的结果?那么,为什么Q1(一个int)的结果也按预期工作?