0

我发现这个 python 函数可以根据“a”值和“大小”值生成 zipf 分布,其中大小类似于频率表中的元素总数:https ://numpy.org/doc/stable/参考/随机/生成/numpy.random.zipf.html

现在,假设我为 'a' = 1.6 和 size = '30' 运行此函数。我使用 python 的字典数据结构来存储我的频率表,这就是它的样子:

    dictionary = {1:16, 2:5, 3:2, 4:1, 12:1, 13:1, 16:1, 65:1, 152:1, 531:1}

键代表元素 1,2,3,4,12,13,16,65,152,531,值代表它们各自的频率。

有没有办法通过查看字典来知道“a”值?我要问的是,假设有一本像我上面写的那样的字典。它是从某个值生成的。我不知道 a 值是什么,但我知道字典包含什么。根据字典元素的频率,有没有办法计算“a”值?例如,像一个公式?

[编辑]

这是我尝试过的东西。使用 KL 散度,我计算使用 2 个连续元素生成的值。公式是

    (frequency of ith element) * ((log2(frequency of ith element)/log2(frequency of (i+1)th element))

我将此公式应用于任何两个连续元素,并在最后找到总和。我将这个总和除以字典的总频率并得到一个“a”值。但是,此“a”值永远不会与原始“a”值匹配。

谢谢!

4

1 回答 1

0

使用 Tim Robert 的提示:

from math import log

a = log(dictionary[1] / dictionary[2], 2)  # 1.68 for the given example
于 2021-10-03T01:20:03.763 回答