马尔可夫链转移矩阵仅输出'0.000'

时间:2018-03-09 16:57:08

标签: python markov

我正在尝试根据csv文件的第一列生成转换矩阵。有59种可能的状态,它们是列表中的整数。

目前我的输出只是一个很长的'0.000s'列表 - 据我所知(59 * 59)的正确大小,但没有它应该具有的权重。

数据肯定在活动列表中,因为它可以单独打印。

import csv
data = open('file.csv')

csv_data = csv.reader(data)
data_lines = list(csv_data)

activities = []

for row in data_lines[:5954]:
    activities.append(row[0])

activities = list(map(int, activities))

def transition_matrix(activities):
    n = 59 #number of states

    m = [[0]*n for _ in range(n)]

    for (i,j) in zip(activities,activities[1:]):
        m[i][j] += 1

    #now convert to probabilities:
    for row in m:
        s = sum(row)
        if s > 0:
            row[:] = [f/s for f in row]
    return m

t = [activities]
m = transition_matrix(t)
for row in m: print(' '.join('{0:.3f}'.format(x) for x in row))

2 个答案:

答案 0 :(得分:0)

您宣布tlist,其中包含activities

但是,activities已经是一个列表。

这意味着您的函数将无法按预期运行,因为您没有以正确的格式传递数据。要解决此问题,请使用t = activities,或直接将activites传递到transition_matrix()而不使用t

答案 1 :(得分:-1)

在分配t时,您似乎正在创建嵌套列表。尝试删除[活动]周围的括号。