所以基本上我有多个数组,我需要用这些数组计算一些东西。问题是这些数组中的一些有时等于零并且是除数。
我想通过过滤数组并说“ if r> = rs:print(“ 0”),否则:print(H)”来解决此问题,但是它不起作用。我还尝试使用地图函数说,如果半径r <0.00001:结果= 0.00001,否则:结果= r。 我尝试打印列表(map(...)),但是没有用
def Max(r):
if r < 0.00001:
result = 0.00001
else:
result = r
return(result)
# radius array (trying to apply Max to all r)
r22 = map(Max, zz[:, 1]) # zz is an odeint function defined before
def Hamiltonian(r, pt, pr, pphi): #all values are given in the code
H = (-((1-rs/r)*-1)(pt*2)/2 + (1-rs/r)(pr*2)/2 + (pphi2)/(2(r**2)))
return(H)
我收到了三个错误消息:“ TypeError:/:不支持的操作数类型:'int'和'map'”,“ TypeError:'numpy.ndarray'对象不可调用”和TypeError:不支持的操作数类型(s)代表/:“ int”和“ list”。有人知道为什么吗?理想情况下,我希望H为所有半径= 0自动打印0,而忽略除以零。谁能帮我吗?
答案 0 :(得分:1)
您的“ H公式”书写不正确,我相信某些乘数符号丢失了...
H = (-((1-rs/r)*-1)*(pt*2)/2 + (1-rs/r)*(pr*2)/2 + (pphi*2)/(2*(r**2)))
对于除法,您可以尝试处理异常吗?像这样:
def hamiltonian(r, pt, pr, pphi):
while True:
try:
H = (-((1 - rs / r) * -1) * (pt * 2) / 2 + (1 - rs / r) * (pr * 2) / 2 + (pphi * 2) / (2 * (r ** 2)))
return(H)
except ZeroDivisionError:
H = 0
return(H)
print(hamiltonian(r, pt, pr, pphi))