首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python转移矩阵

Python转移矩阵
EN

Stack Overflow用户
提问于 2014-08-12 16:29:16
回答 1查看 7.7K关注 0票数 4

我有个清单是这样的:

2,1,3,1,2,3,1,2,2,2

我想要的是一个过渡矩阵,它显示的顺序如下:

  • 1跟1的频率是多少?
  • 1跟2的频率是多少?
  • 1跟3的频率是多少?
  • 2跟1的频率是多少?
  • 2跟2的频率是多少?
  • 2跟3的频率是多少?

等等..。

((0,2,1),(1,2,1),(2,0,0))

有没有预先制作好的模块去拿这个?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-12 16:38:55

我不知道是否有模块,但我会使用以下代码,这是很容易泛化的:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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]]

如果需要的话,详细介绍一下正在发生的事情:

  1. zip(a, a[1:])获取所有的连续数字对。
  2. Counter计算每对出现多少次
  3. for循环简单地将Counter生成的字典转换为所请求的矩阵/列表。
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25269476

复制
相关文章

相似问题

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