有没有一种方法可以找到矩阵中不同值的概率

时间:2018-11-11 20:58:09

标签: python python-3.x probability

我认为应该有一个库可以帮助我完成此任务,而不用编写很多行代码。我尝试从与我的问题有关的书中找到一些解决方案,但找不到任何解决方案。

我最近读过的一本书与概率有关:

  

用于José的概率,统计和机器学习的Python   Unpingco

任务是我下面有一个像这样的矩阵

0    1
213 vha
342 gha
523 xha
121 gha
812 gha
612 vha
123 gha

,我希望程序计算第二行中从vhagha的移动步骤。从第三行的ghaxha。如果重复任何步骤,它将被添加到上一步。例如,在矩阵的末尾重复第一行和第二行中的vhagha

所需的输出将是similar steps added together / total number of rows-1。在第一种情况下,它是vhagha的概率= 2 / 7-1

所需的输出

vha to gha prob = 0.3
gha to xha prob = 0.16
xha to gha prob = 0.16
gha to gha prob = 0.16
gha to vha prob = 0.16

Total probs = 1

1 个答案:

答案 0 :(得分:2)

您可以使用Bootstrap 4 documentation: Multiple targets来计算转换发生的次数,然后计算每次转换的概率。

您可以使用Counter组合列表m的两个切片-一个删除最后一个元素,另一个删除第一个元素-获取相邻元素的元组。 zip(m[:-1], m[1:])做到了。然后,您可以用Counter来计数表示过渡的相似元组吗?

from collections import Counter

m = [[213, 'vha'],
     [342, 'gha'],
     [523, 'xha'],
     [121, 'gha'],
     [812, 'gha'],
     [612, 'vha'],
     [123, 'gha']]

c = Counter([(x[1], y[1]) for x, y in zip(m[:-1], m[1:])])
probs = [(e, v / (len(m) - 1)) for e, v in c.items()]

for p in probs:
    print(p)

输出

(('vha', 'gha'), 0.3333333333333333)                                                                                                                
(('gha', 'xha'), 0.16666666666666666)                                                                                                               
(('xha', 'gha'), 0.16666666666666666)                                                                                                               
(('gha', 'gha'), 0.16666666666666666)                                                                                                               
(('gha', 'vha'), 0.16666666666666666)