【问题标题】:Numpy error: underflow encountered in expNumpy 错误:exp 中遇到下溢
【发布时间】:2026-01-06 18:45:01
【问题描述】:

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

FloatingPointError: underflow encountered in exp

我要定义的数组如下:

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

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

【问题讨论】:

  • 您确定不要1000**2 而不是1000?考虑到您正在使用的值的大小,1000 的因子看起来不太可能。

标签: python numpy error-handling floating-point


【解决方案1】:

分解你为最终元素计算的内容:

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

temp4 为 -12845.056

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

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

【讨论】:

  • 谢谢!我很困惑,因为代码在一个文件夹中运行时没有任何错误消息,但我在父目录中有笔记本的副本。父目录中的那个给了我问题。我在发布这个问题之前和之后都尝试过文件夹中的副本,它工作得很好。你知道为什么会这样吗?
  • 不知道。尝试添加几个打印语句来报告length 并跟踪创建。可以手动缩减length查看基本操作吗?
  • e^-12845.056 = 2.9...e-5579。这会导致双精度甚至扩展精度(80 位)浮点类型下溢。
最近更新 更多