首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从字符串到马尔可夫链

从字符串到马尔可夫链
EN

Stack Overflow用户
提问于 2019-05-28 01:14:02
回答 2查看 200关注 0票数 1

我目前正在考虑一个问题,即马尔可夫链的输入是以字符串列表的形式给出的。必须将此输入转换为马尔可夫链。我已经在这个问题上坐了几个小时了。

我的想法是:正如你在下面看到的,我已经尝试使用集合中的计数器来计算所有的转换,这是有效的。现在我正在尝试计算所有的元组,其中A和B是第一个元素。这为我提供了A的所有可能的转换。

然后我将像(A,B)一样计算转换。然后我想用这些来创建一个包含所有概率的矩阵。

代码语言:javascript
复制
def markov(seq):

    states = Counter(seq).keys()
    liste = []
    print(states)
    a = zip(seq[:-1], seq[1:])
    print(list(a))

print(markov(["A","A","B","B","A","B","A","A","A"]))

到目前为止,我还不能对元组进行计数。任何关于如何解决此问题的帮助或新想法都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-28 01:51:21

要对元组进行计数,可以创建另一个计数器。

代码语言:javascript
复制
b = Counter()
for word_pair in a:
    b[word_pair] += 1

b将保留这两个对的计数。

要创建矩阵,可以使用numpy。

代码语言:javascript
复制
c = np.array([[b[(i,j)] for j in states] for i in states], dtype = float)

作为练习,我将把将每行和归一化为1的任务留下来。

票数 1
EN

Stack Overflow用户

发布于 2019-05-28 02:15:44

我没有得到你想要的东西,但这是我认为的:

代码语言:javascript
复制
from collections import Counter

def count_occurence(seq):

    counted_states = []
    transition_dict = {}
    for tup in seq:
        if tup not in counted_states:
            transition_dict[tup] = seq.count(tup)
        counted_states.append(tup)
    print(transition_dict)
    #{('A', 'A'): 3, ('A', 'B'): 2, ('B', 'B'): 1, ('B', 'A'): 2}

def markov(seq):

    states = Counter(seq).keys()
    print(states)
    #dict_keys(['A', 'B'])
    a = list(zip(seq[:-1], seq[1:]))
    print(a)
    #[('A', 'A'), ('A', 'B'), ('B', 'B'), ('B', 'A'), ('A', 'B'), ('B', 
    #'A'), ('A', 'A'), ('A', 'A')]
    return a

seq = markov(["A","A","B","B","A","B","A","A","A"])
count_occurence(seq)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56330105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档