Python doubleasterisk**幂运算符异常行为

2024-10-06 08:39:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了一个函数来替换scipy.interp1d公司通过近似两个变量(elev和MaxQ)之间的关系来加速我的代码。这个方程是一个四阶多项式。我希望函数能够计算单输入和一维数组输入的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))

答案如下:

^{pr2}$

我期待答案。由于某些原因,Q3没有。我想知道这是为什么。我在控制台中看到的eleva和elevb的唯一区别是a是float64,b是int32。为什么这会改变方程的结果?那么,为什么Q1的结果(它是一个int)也像预期的那样工作?在


Tags: 函数forreturnifnpelseprintshape
1条回答
网友
1楼 · 发布于 2024-10-06 08:39:29

对于Q3,elev[i]是一个numpy.int32实例,elev[i]**4溢出。对于Q1,elev是Python int,elev**4使用任意精度的算术。在

相关问题 更多 >