Python 转换矩阵

标签 python transitions

我有一个看起来像这样的列表:

[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))

有预制模块吗?

最佳答案

我不知道是否有模块,但我会使用这段代码,它很容易概括:

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]]

如果需要,一些正在发生的事情的细节:

  1. zip(a, a[1:]) 获取所有的连续数字对。
  2. Counter 计算每对出现的次数
  3. for 循环简单地将 Counter 生成的字典转换为您请求的矩阵/列表列表

关于Python 转换矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25269476/

相关文章:

python - 使用 python win32com 创建数据透视图导致 pywintypes.com_error

css - div 重叠固定 div - CSS 不透明度/过渡

ios - 如何使用 UICollectionViewTransitionLayout 插入自定义 UICollectionViewLayoutAttributes 属性

python - 如何使用 PyQtGraph 的 DateAxisItem?

python - 如何知道 Celery 中事件组 {task} 是否启用或禁用

python - 按子列表元素匹配过滤列表

java - 在 java 图像更改时启用转换

html - 更改父元素的定位会阻止 Firefox 中的子元素 CSS3 转换

android - 场景与 fragment 和 View

python - 如何用不同的数据更新多个不同的数字