繁体   English   中英

np.random.choice错误:概率不总和为1,但打印说它确实如此?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM