仅输出“0.000”的马尔可夫链转移矩阵
Markov chain transition matrix outputing only '0.000's
我正在尝试根据 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))
您在分配 t 时似乎正在创建嵌套列表。尝试删除 [activities].
周围的括号
您将 t
声明为包含 activities
的 list
。
但是,activities
已经是一个列表。
这意味着您的函数不会 运行 如预期的那样,因为您没有以正确的格式传递数据。要解决此问题,只需使用 t = activities
,或者不使用 t
.
直接将 activites
传递给 transition_matrix()
我正在尝试根据 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))
您在分配 t 时似乎正在创建嵌套列表。尝试删除 [activities].
周围的括号您将 t
声明为包含 activities
的 list
。
但是,activities
已经是一个列表。
这意味着您的函数不会 运行 如预期的那样,因为您没有以正确的格式传递数据。要解决此问题,只需使用 t = activities
,或者不使用 t
.
activites
传递给 transition_matrix()