Numpy Cosh函数溢出

时间:2015-08-08 04:57:33

标签: python numpy

在这个简化的代码中,我在cosh函数中遇到溢出错误:

import numpy as np
x = np.linspace(0,10,100)
for i in range(np.size(x)):
    print np.cosh(20*x[i]**2)

有没有办法轻松解决这个问题?

2 个答案:

答案 0 :(得分:2)

当您需要处理大数字时,Sympy很有用:

import sympy as sy

x = sy.symbols("x", real=True)

y = 1/sy.cosh(x)
print(y.subs(x, 2000).evalf())  # => 5.15307174592230e-869

要确定防止溢出的边界,请考虑最大浮点值为1.79769e + 308。因此

print(sy.acosh(1.79769e+308).evalf()) # => 710.475858330117

所以你可以做到

inv_acosh = lambda x: 1/np.cosh(x) if abs(x) < 710.4 else 0.

答案 1 :(得分:0)

试试这个

lambda x: 0.5/cosh(np.minimum(np.abs(x), 700.0*np.ones(x.shape)))