有没有办法找到矩阵中不同值的概率

Is there a way to find the probability of different values in matrices

我以为会有一个库可以帮助我完成这项任务,而不是编写很多行代码。我试图从与我的问题相关的书籍中找到一些解决方案,但我找不到任何解决方案。

最近读的一本概率相关的书:

Python for Probability, Statistics, and Machine Learning for José Unpingco

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

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

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

所需的输出将是 similar steps added together/total number of rows-1。在第一种情况下是 vhagha prob = 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

您可以使用 Counter 来计算转换发生的次数,然后计算每个转换的概率。

您可以使用 zip 组合列表的两个部分 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)