我认为应该有一个库可以帮助我完成此任务,而不用编写很多行代码。我尝试从与我的问题有关的书中找到一些解决方案,但找不到任何解决方案。
我最近读过的一本书与概率有关:
用于José的概率,统计和机器学习的Python Unpingco
任务是我下面有一个像这样的矩阵
0 1
213 vha
342 gha
523 xha
121 gha
812 gha
612 vha
123 gha
,我希望程序计算第二行中从vha
到gha
的移动步骤。从第三行的gha
到xha
。如果重复任何步骤,它将被添加到上一步。例如,在矩阵的末尾重复第一行和第二行中的vha
至gha
。
所需的输出将是similar steps added together
/ total number of rows-1
。在第一种情况下,它是vha
至gha
的概率= 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
答案 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)