Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python转换矩阵_Python_Transitions - Fatal编程技术网

Python转换矩阵

Python转换矩阵,python,transitions,Python,Transitions,我有一个列表,如下所示: [2,1,3,1,2,3,1,2,2] 我想要的是一个转换矩阵,它向我展示了如下序列: 1后面跟着1的频率是多少 1后面跟着2的频率是多少 1后面跟着3的频率是多少 2后面跟着1的频率是多少 2后面跟着2的频率是多少 2后面跟着3的频率是多少 等等 ((0,2,1)、(1,2,1)、(2,0,0)) 是否有一个预先制作的模块来获取此信息?我不知道是否有模块,但我会使用此代码,这很容易推广: import numpy as np from collections im

我有一个列表,如下所示:

[2,1,3,1,2,3,1,2,2]

我想要的是一个转换矩阵,它向我展示了如下序列:

  • 1后面跟着1的频率是多少
  • 1后面跟着2的频率是多少
  • 1后面跟着3的频率是多少


  • 2后面跟着1的频率是多少


  • 2后面跟着2的频率是多少

  • 2后面跟着3的频率是多少
等等

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


是否有一个预先制作的模块来获取此信息?

我不知道是否有模块,但我会使用此代码,这很容易推广:

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:])
    获取所有连续数字对
  • 计数器
    计算每对出现的次数
  • for循环简单地将字典
    计数器
    生成的结果转换为您请求的列表矩阵/列表

  • 第二个元组是什么?2跟1的频率是多少?2跟2的频率是多少?2跟3的频率是多少?但在列表中,2跟1只有一次。为什么你的元组是(0,2,1)?不应该是(1,2,1)吗?(假设元组的结构类似于
    (出现次数、第一个数字、第一个数字后面的数字)
    )@Kevin我认为ahrf的意思是从左到右依次为2和1。序列“1,2”重复两次,这是与马尔可夫链相同意义上的转移矩阵吗?如果是这样的话,也许你应该说清楚。如果我们没有安装
    numpy
    怎么办?开箱即用的Python中有什么替代方案?@Kevin:
    [[0代表范围内(n)]代表范围内(n)]
    @Kevin更新了无numpy版本。但我真的推荐numpy。如果有一个像您最初要求的模块解决方案,它可能涉及到它。我使用的是python 3.x,这可能是我得到错误的原因:“Counter”对象没有属性“iteritems”?@ahrf:yesp。您可以改用
    .items()
    。(和
    range
    而不是
    xrange
    ,当然要修复
    print
    s。)