大负数的指数

时间:2017-03-29 04:30:23

标签: python numpy floating-point precision exponential

如何计算Python上的np.exp(-28000)等数字?答案是5E-12161左右。我被告知,由于双精度浮点格式,我只能计算一个数字> 1E-2048

3 个答案:

答案 0 :(得分:1)

尝试使用mpmath进行任意精度的浮点运算

编辑1:

>>> import mpmath as mp 
>>> import numpy as np
>>> a = np.matrix((0,0)) 
>>> print(a)
[0.0 0.0]
>>> b = mp.matrix(a.tolist())
>>> c = b.apply(mp.exp)
>>> print(c)
[1.0]
[1.0]   

答案 1 :(得分:0)

尝试使用十进制模块。

Decimal(math.exp(1))**-28000

答案 2 :(得分:0)

您可以定义一个函数来计算“bigexponent”并将其应用于数组(沿轴)。但请注意,输入数组必须是int类型。

# solution courtesy: http://stackoverflow.com/a/43084475/2956066
In [97]: def bigexp(x):
    ...:     return Decimal(math.exp(1))**x


In [98]: np.apply_along_axis(bigexp, 1, arr)    

效率(按降序排列)

# twice faster than applying along axis 0
In [115]: %timeit np.apply_along_axis(bigexp, 1, a)
1000 loops, best of 3: 272 µs per loop

In [116]: %timeit np.apply_along_axis(bigexp, 0, a)
1000 loops, best of 3: 465 µs per loop