【发布时间】:2019-04-15 16:37:18
【问题描述】:
我创建了一个函数make_rule(text, scope=1),它简单地遍历一个字符串并生成一个字典,用作马尔可夫文本生成器的规则(其中范围是链接字符的数量,而不是单词)。
>>> rule = make_rule("abbcad", 1)
>>> rule
{'a': ['b', 'd'], 'b': ['b', 'c'], 'c': ['a']}
我的任务是计算这个系统的熵。为了做到这一点,我想我需要知道:
- 一个值在字典中出现的总频率,即它的总频率。
- 给定字典中某个键的值出现的频率,即它的相对频率。
有没有一种快速的方法可以为字典中的每个值获取这两个数字?
对于上面的例子,我需要这个输出:
'a' total: 1, 'a'|'a': 0, 'a'|'b': 0, 'a'|'c': 1
'b' total: 2, 'b'|'a': 1, 'b'|'b': 1, 'b'|'c': 0
'c' total: 1, 'c'|'a': 0, 'c'|'b': 1, 'c'|'c': 0
'd' total: 1, 'd'|'a': 1, 'a'|'b': 1, 'a'|'c': 1
我猜'a' 的总数很容易推断出来,所以也许只为字典中出现的每个唯一项目输出一个三元组列表:
[[('a', 'a', 0), ('a', 'b', 0), ('a', 'c', 1)], [('b', 'a', 1), ('b', 'b', 1), ('b', 'c', 0)], ...]
【问题讨论】:
-
上述字典对每个值的预期结果是什么?
-
哦,对不起,我好像删掉了预期的输出。我现在已经添加了。输出的格式不是很重要,重要的是我如何有效地得到这些数字。
标签: python python-3.x dictionary frequency markov-chains