迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

在 Python 的 numpy.exp()函数中遇到的溢出错误

作者:迹忆客 最近更新:2024/03/12 浏览次数:

NumPy 是一个 Python 包,其中包含丰富的实用程序,可用于处理大型多维矩阵和数组,并对它们执行复杂和直接的数学运算。

这些实用程序对输入是动态的,并且高度优化和快速。NumPy 包有一个函数 exp() 计算输入 numpy 数组的所有元素的指数。

换句话说,它计算 exx 是输入 numpy 数组的每个数字,e 是大约等于 2.71828 的欧拉数。

由于此计算可能会产生巨大的数字,因此某些数据类型无法处理如此大的值,因此,此函数将返回 inf 和错误而不是有效的浮点值。

例如,对于 numpy.exp(709),此函数将返回 8.21840746e+307,但对于 numpy.exp(710),将返回 runtimeWarning:exp inf 中遇到溢出

在本文中,我们将学习如何解决此问题。


修复 Python NumPy 中 numpy.exp() 函数中的溢出问题

我们必须将值存储在能够保存如此大值的数据类型中以解决此问题。

例如,np.float128 可以容纳比 float64float32 更大的数字。我们所要做的只是将数组的每个值类型转换为更大的数据类型并将其存储在一个 numpy 数组中。

下面的 Python 代码描述了这一点。

import numpy as np

a = np.array([1223, 2563, 3266, 709, 710], dtype=np.float128)
print(np.exp(a))

输出:

[1.38723925e+0531 1.24956001e+1113 2.54552810e+1418 8.21840746e+0307
 2.23399477e+0308]

尽管上面的 Python 代码可以无缝运行,没有任何问题,但我们仍然容易出现同样的错误。

背后的原因很简单;甚至 np.float128 也有它可以容纳的数字的阈值。每种数据类型都有一个上限,如果超过了上限,事情就会开始出现问题,程序就会开始出现溢出错误。

要理解上面提到的点,请参考下面的 Python 代码。尽管 np.float128 在最后一个 Python 代码片段中解决了我们的问题,但它不适用于更大的值。

import numpy as np

a = np.array([1223324, 25636563, 32342266, 235350239, 27516346320], dtype=np.float128)
print(np.exp(a))

输出:

<string>:4: RuntimeWarning: overflow encountered in exp
[inf inf inf inf inf]

exp() 函数为 numpy 数组中的每个值返回一个无穷大。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 Python 中将 Tensor 转换为 NumPy 数组

发布时间:2024/03/12 浏览次数:118 分类:Python

在 Python 中,可以使用 3 种主要方法将 Tensor 转换为 NumPy 数组:Tensor.numpy()函数,Tensor.eval()函数和 TensorFlow.Session()函数。

将 PIL 图像转换为 NumPy 数组

发布时间:2024/03/12 浏览次数:153 分类:Python

在 Python 中,可以使用两种主要方法将 PIL 图像转换为 3 维 NumPy 数组:numpy.array()函数和 numpy.asarray()函数。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便