Numpy 错误:exp 中遇到下溢

问题描述 投票:0回答:2

我正在尝试定义一个简单的指数,无论我在指数参数中放入多少数字,我都会得到以下结果:

FloatingPointError: underflow encountered in exp

我试图定义的数组如下:

     time = np.arange(length)
     window = np.exp(-(time-512)**2/1000.0)

哪里

length = 4096
。 我对 Python 相当缺乏经验,并且看到类似的问题在某处得到了回答,但我并没有真正理解它。 我还应该注意到这段代码之前运行没有问题。

python numpy error-handling floating-point
2个回答
6
投票

分解您对最终元素的计算:

temp1 = 4096 - 512
temp2 = temp1**2
temp3 = -temp2
temp4 = temp3 / 1000.0

temp4 为-12845.056

现在,当您尝试取该数字的自然反对数时会发生什么? numpy 允许的浮点值范围是多少?

我相信你会发现你只是想把它弄得太小。 如果这是计算中的中间结果,我建议您将数字保留为自然对数,直到可以再次使其变大。 或者,研究一些包来支持极值,或者将所有值乘以足够大的标量以保持准确性。


0
投票

如果您设置了

np.seterr(all='ignore')
或者
np.seterr(under='ignore')
numpy 足够聪明,可以将结果设置为零,而不会引发任何错误。

© www.soinside.com 2019 - 2024. All rights reserved.