栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

带有RuntimeWarning的numpy除法:在double_scalars中遇到无效的值

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

带有RuntimeWarning的numpy除法:在double_scalars中遇到无效的值

您无法解决。简单地说

answer1.sum()==0
,您不能执行零除。

发生这种情况是因为

answer1
2的指数非常大,为负数,因此结果四舍五入为零。

nan
在这种情况下,由于除以零而返回。

现在,要解决您的问题,您可以:

  • 去像mpmath这样的高精度数学图书馆。但这没那么有趣。
  • 作为更大武器的替代品,请进行一些数学操作,如下所示。
  • 选择一款
    scipy/numpy
    完全可以满足您需求的定制功能!查看@Warren Weckesser的答案。

在这里,我解释了如何进行一些数学运算以帮助解决此问题。我们有分子的:

exp(-x)+exp(-y) = exp(log(exp(-x)+exp(-y)))     = exp(log(exp(-x)*[1+exp(-y+x)]))     = exp(log(exp(-x) + log(1+exp(-y+x)))     = exp(-x + log(1+exp(-y+x)))

上面

x=3* 1089
和哪里
y=3* 1093
。现在,这个指数的参数是

-x + log(1+exp(-y+x)) = -x + 6.1441934777474324e-06

对于分母,您可以类似地进行处理,但获得的

log(1+exp(-z+k))
值已四舍五入
0
,因此分母处的指数函数的参数仅四舍五入为
-z=-3000
。然后,您得到的结果是

exp(-x + log(1+exp(-y+x)))/exp(-z) = exp(-x+z+log(1+exp(-y+x))   = exp(-266.99999385580668)

如果仅保留2个前导项(即

1089
分子中的第一个数字和分母中的第一个数字)
1000
,则该结果已经非常接近您得到的结果:

exp(3*(1089-1000))=exp(-267)

为此,让我们看看我们与Wolfram
alpha(link)解决方案有多近:

Log[(exp[-3*1089]+exp[-3*1093])/([exp[-3*1000]+exp[-3*4443])] -> -266.999993855806522267194565420933791813296828742310997510523

这个数字与上面的指数之差为

+1.7053025658242404e-13
,因此我们在分母处的近似值很好。

最终结果是

'exp(-266.99999385580668) = 1.1050349147204485e-116

来自Wolfram
Alpha是(link)

1.105034914720621496.. × 10^-116 # Wolfram alpha.

同样,在这里也可以使用numpy。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/641461.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号