有没有办法找到矩阵中不同值的概率
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
的步骤。第三行从 gha
到 xha
。如果重复任何步骤,它将被添加到上一步。例如,第一行和第二行中的 vha
到 gha
在矩阵的末尾重复。
所需的输出将是 similar steps added together
/total number of rows-1
。在第一种情况下是 vha
到 gha
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)
我以为会有一个库可以帮助我完成这项任务,而不是编写很多行代码。我试图从与我的问题相关的书籍中找到一些解决方案,但我找不到任何解决方案。
最近读的一本概率相关的书:
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
的步骤。第三行从 gha
到 xha
。如果重复任何步骤,它将被添加到上一步。例如,第一行和第二行中的 vha
到 gha
在矩阵的末尾重复。
所需的输出将是 similar steps added together
/total number of rows-1
。在第一种情况下是 vha
到 gha
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)