python - 如何创建频率矩阵?

标签 python matrix count frequency nested-lists

我刚刚开始使用Python,刚刚遇到以下问题:

假设我有以下列表:

list = [["Word1","Word2","Word2","Word4566"],["Word2", "Word3", "Word4"], ...]

我想要得到的结果(矩阵)应该是这样的: screenshot

显示的列和行都是出现的单词(无论哪个列表)。

我想要的是一个程序,可以计算每个列表中单词的出现次数(按列表)。

下图是第一个列表后的结果。

是否有一种简单的方法可以实现类似的目标?


编辑: 基本上我想要一个列表/矩阵来告诉我当单词 1 也在列表中时单词 2-4566 出现了多少次,依此类推。

因此,我会得到每个单词的列表,其中显示与该单词相关的所有其他 4555 个单词的绝对频率。


所以我需要一个算法来迭代所有这些单词列表并构建结果列表

最佳答案

据我了解,您想要创建一个矩阵,显示每对单词中两个单词位于一起的列表数量。

首先我们应该修复唯一单词的集合:

lst = [["Word1","Word2","Word2","Word4566"],["Word2", "Word3", "Word4"], ...] # list is a reserved word in python, don't use it as a name of variables

words = set()
for sublst in lst:
    words |= set(sublst)
words = list(words)

其次我们应该定义一个带零的矩阵:

result = [[0] * len(words)] * len(words) # zeros matrix N x N

最后我们通过给定的列表填充矩阵:

for sublst in lst:
    sublst = list(set(sublst)) # selecting unique words only
    for i in xrange(len(sublst)):
        for j in xrange(i + 1, len(sublst)):
            index1 = words.index(sublst[i])
            index2 = words.index(sublst[j])
            result[index1][index2] += 1
            result[index2][index1] += 1

print result

关于python - 如何创建频率矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41300583/

相关文章:

仅当 count() as col1 <> col2 时,mySQL 选择行

python - 在 Python 中子类化特定异常的缺点?

Python - 解码后的unicode字符串不会保持解码状态

python - 比较 Boost.Odeint 与 Scipy.integrate.odeint?

javascript - 创建代表性对 Angular 矩阵 : javascript

MySQL COUNT() GROUP BY 不起作用

python - 创建后如何移动 Qt QPainterPath 中的点?

c++ - 对象之间的标准高效映射

c - 加速二维矩阵读取

mysql - SQL Count 使用 WHERE 子句连接表