首页 / 日志 / Python中的日志计算
Python中的日志计算
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python中的日志计算,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1338字,纯文字阅读大概需要2分钟。
内容图文
![Python中的日志计算](/upload/InfoBanner/zyjiaocheng/698/5635dee90da54bb7ab9cbfd97bf34684.jpg)
我想要计算类似的东西:
其中f(i)是一个函数,它在[-1,1]中为{1,2,…,5000}中的任何i返回实数.
显然,和的结果在[-1,1]中,但是当我似乎无法使用直接编码在Python中计算它时,0.55000变为0并且梳子(5000,2000)变为inf ,这导致计算的总和变成NaN.
所需的解决方案是使用双面登录.
那是使用身份a×b = 2log(a)log(b),如果我可以计算log(a)和log(b)我可以计算总和,即使a很大而b几乎为0.
所以我想我要问的是,如果有一种简单的计算方法
log2(scipy.misc.comb(5000,2000))
所以我可以简单地计算我的总和
sum([2**(log2comb(5000,i)-5000) * f(i) for i in range(1,5000) ])
@ abarnert的解决方案,同时为5000图工作,通过提高计算梳子的精度来解决问题.这适用于此示例,但不会扩展,因为如果不是5000而我们需要1e7,所需的内存将显着增加.
目前,我正在使用一种丑陋的解决方法,但保持低内存消耗:
log2(comb(5000,2000)) = sum([log2 (x) for x in 1:5000])-sum([log2 (x) for x in 1:2000])-sum([log2 (x) for x in 1:3000])
有没有办法在可读的表达式中这样做?
解决方法:
总和
f是相对于binomial distribution的期望,其中n = 5000且p = 0.5.
您可以使用scipy.stats.binom.expect计算:
import scipy.stats as stats
def f(i):
return i
n, p = 5000, 0.5
print(stats.binom.expect(f, (n, p), lb=0, ub=n))
# 2499.99999997
还要注意,当n变为无穷大时,p固定,二项分布approaches the normal distribution具有平均np和方差np *(1-p).因此,对于大n,您可以改为计算:
import math
print(stats.norm.expect(f, loc=n*p, scale=math.sqrt((n*p*(1-p))), lb=0, ub=n))
# 2500.0
内容总结
以上是互联网集市为您收集整理的Python中的日志计算全部内容,希望文章能够帮你解决Python中的日志计算所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。