我有个清单是这样的:
2,1,3,1,2,3,1,2,2,2
我想要的是一个过渡矩阵,它显示的顺序如下:
等等..。
((0,2,1),(1,2,1),(2,0,0))
有没有预先制作好的模块去拿这个?
发布于 2014-08-12 16:38:55
我不知道是否有模块,但我会使用以下代码,这是很容易泛化的:
import numpy as np
from collections import Counter
a = [2, 1, 3, 1, 2, 3, 1, 2, 2, 2]
b = np.zeros((3,3))
for (x,y), c in Counter(zip(a, a[1:])).iteritems():
b[x-1,y-1] = c
print b
array([[ 0., 2., 1.],
[ 1., 2., 1.],
[ 2., 0., 0.]])没有安装numpy:
b = [[0 for _ in xrange(3)] for _ in xrange(3)]
for (x,y), c in Counter(zip(a, a[1:])).iteritems():
b[x-1][y-1] = c
print b
[[0, 2, 1], [1, 2, 1], [2, 0, 0]]如果需要的话,详细介绍一下正在发生的事情:
zip(a, a[1:])获取所有的连续数字对。Counter计算每对出现多少次Counter生成的字典转换为所请求的矩阵/列表。https://stackoverflow.com/questions/25269476
复制相似问题