[英]np.random.choice error : probabilities doesn't sum to 1, but print says it does ?
当使用numpy的random.choice函数时,我遇到了一个小问题。 我给它一个列表(a),以及与该列表相关的概率(p)(我试图生成随机文本,实现具有在训练语料库上计算的概率的二元组马尔可夫模型)。 问题是,它在程序中间崩溃,告诉我概率不总和为1.更大的问题是,sum(p)总和为1。
这是一个错误吗? random.choice的总和是否与常规求和函数不同? 我错过了什么吗?
这是代码:
def randomBigram(self):
doc = open(self.path+"/randomGenBi.txt", "wb")
lettre = str(np.random.choice(self.letters.index))
a = [elem for elem in self.probaBigram.index if elem[1] == lettre]
p = [self.probaBigram[elem] for elem in self.probaBigram.index if elem[1] == lettre]
random = np.random.choice(a, p=p)
i = 0
while i < 5000:
lettre = str(np.random.choice(self.letters.index))
print "lettre", lettre
a = [elem for elem in self.probaBigram.index if elem[1] == lettre]
p = [self.probaBigram[elem] for elem in self.probaBigram.index if elem[1] == lettre]
if sum(p) != 1.0: #debug
print "somme sur p:", sum(p)
print "not equal"
else:
print "equals one"
random = np.random.choice(a, p=p)
doc.write(random)
i += 1
这是我的shell输出示例:
让p:1.0的总和不相等
我真的不明白......
欢迎任何帮助:)
谢谢 !
杰西卡
更改:
print "somme sur p:", sum(p)
至
print "somme sur p:", repr(sum(p))
^^^^^ ^
然后再试一次。 print
在打印之前隐式地将str()
应用于项目,并且在“足够老”的Python版本中, str
会将浮点数浮动到12位有效数字。 有许多不等于1的浮点数将打印为1.0
。 但是repr显示为1.0
的唯一浮点数恰好是1.0。
一旦你发现总和真的不是1.0,告诉我们它是什么,然后问一个关于下一步该做什么的新问题;-)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.