Python 3.x ValueError:math.log()中的数学域错误

Python 3.x ValueError:math.log()中的数学域错误,python-3.x,Python 3.x,Python中的math.log有问题。我试图计算一个概率方程,但我不知道为什么它总是显示错误,即使结果是正确的。有人能看到我下面代码中的任何问题吗 import math import numpy def calc_snp_log_odds(readData): pobs = numpy.prod([i[0] for i in readData]) pobs1 = numpy.prod([i[1] for i in readData]) logOdds = (math.log(pobs*0.8

Python中的math.log有问题。我试图计算一个概率方程,但我不知道为什么它总是显示错误,即使结果是正确的。有人能看到我下面代码中的任何问题吗

import math
import numpy
def calc_snp_log_odds(readData):
pobs = numpy.prod([i[0] for i in readData])
pobs1 = numpy.prod([i[1] for i in readData])
logOdds = (math.log(pobs*0.8+pobs1*0.2) + math.log(0.001)) - (math.log(pobs) + math.log(0.999))
return logOdds
结果应该是
-1.614454844260801
错误:

测试失败#2。运行时错误
回溯(最近一次呼叫最后一次):
文件“监禁代码”,第17行,在
logOdds=计算概率(读取数据)
计算snp日志中第8行“监禁代码”文件
logOdds=(数学日志(pobs*0.8+pobs1*0.2)+数学日志(0.001))-(数学日志(pobs)+数学日志(0.999))

ValueError:math domain error

打印
pobs
pobs1
的值-我们无法猜测它们是什么-pobs的值是0.001,pobs1是0.99。如果记录的数字非常接近于零,则可能会发生这种情况。我替换了
pobs=0.001
pobs2=0.99
,但没有得到错误。您可能需要打印出您正在获取的
log
的所有数字的值。打印
pobs
pobs1
的值-我们无法猜测它们是什么pobs的值是0.001,pobs1是0.99。如果您获取非常接近于零的数字的日志,可能会发生这种情况。我替换了
pobs=0.001
pobs2=0.99
,但没有得到错误。您可能希望打印出您正在记录的所有数字的值。