Numpy错误:在指数计算中遇到下溢。

5

我正在尝试定义一个简单的指数函数,无论我在指数函数参数中输入什么数字,都会出现以下错误:

FloatingPointError: underflow encountered in exp

我想要定义的数组如下:

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

其中 length = 4096。我对Python不是很熟练,在这里看到了一个类似的问题,但我并没有真正理解它。我还应该注意到,这段代码之前运行过没有问题。


你确定不想用 1000**2 而不是 1000 吗?考虑到你所处理的数值大小,使用 1000 的因子似乎不太可能。 - Mark Dickinson
1个回答

6

请将最后一个元素的计算方式分解:

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

temp4是-12845.056

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

我相信你会发现你刚刚尝试将其变得太小了。如果这是计算中间结果,建议将该数字保持为自然对数,直到你可以再次使其变大。或者,研究一些支持极端值的软件包,或者将所有值乘以足够大的标量以保持准确性。


谢谢!我很困惑,因为代码在一个文件夹中运行时没有任何错误信息,但是我有一个笔记本的副本在父目录中。在父目录中的那个副本会出现问题。我已经尝试过在发布这个问题之前和之后都在文件夹中复制,它可以正常工作。你知道为什么会出现这种情况吗? - Amelia Henkel
没有头绪。尝试插入一些打印语句来报告“长度”并跟踪创建过程。您可以手动缩短“长度”以检查基本操作吗? - Prune
e^-12845.056 = 2.9...e-5579。这会导致双精度和扩展精度(80位)浮点类型下溢。 - Rudy Velthuis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接