Python 如何将共生矩阵转换为稀疏矩阵

Python 如何将共生矩阵转换为稀疏矩阵,python,scipy,sparse-matrix,Python,Scipy,Sparse Matrix,我开始处理稀疏矩阵,所以我对这个主题不是很精通。我的问题是,我有一个单词列表中的简单coo出现矩阵,只是一个二维共现矩阵,逐字计算一个单词在同一上下文中出现的次数。由于语料库没有那么大,所以矩阵非常稀疏。我想把它转换成一个稀疏矩阵,以便更好地处理它,最后再做一些矩阵乘法。这里是我到目前为止所做的工作(仅第一部分,其余只是输出格式和清理数据): 我的想法是创建一个新功能: def matrix_to_sparse(d): A = sparse.lil_matrix(d) 这有什么意义吗?

我开始处理稀疏矩阵,所以我对这个主题不是很精通。我的问题是,我有一个单词列表中的简单coo出现矩阵,只是一个二维共现矩阵,逐字计算一个单词在同一上下文中出现的次数。由于语料库没有那么大,所以矩阵非常稀疏。我想把它转换成一个稀疏矩阵,以便更好地处理它,最后再做一些矩阵乘法。这里是我到目前为止所做的工作(仅第一部分,其余只是输出格式和清理数据):

我的想法是创建一个新功能:

def matrix_to_sparse(d):
    A = sparse.lil_matrix(d)
这有什么意义吗?然而,这是不工作的,不知何故,我不知道如何得到一个稀疏矩阵。我应该更好地使用numpy阵列吗?最好的方法是什么。我想比较许多处理矩阵的方法


如果有人能给我指点方向,那就太好了。

以下是如何从一组SciPy的COO格式的文档构建文档术语矩阵
a
,这是易用性和效率之间的一个很好的折衷(*):

现在,要获得共现矩阵:

A.T * A
(忽略对角线,它保持项与项本身的共现,即平方频率)


或者,使用一些为您提供此类服务的软件包,例如或。(我对这两个项目都有贡献,所以这可能不是公正的建议。)

应该对您有用。如果你不使用字典,我会说直接把它放到一个矩阵中。是的,但我也想用单词来映射共现,如果我把语料库直接放到矩阵中,这行吗?我对此表示怀疑。哦,是的,我听说过scikit learn,但我还没有尝试过。我猜A.t*A的意思是:转置A*A,对吗?有什么简单的方法可以在python中实现吗?@El_Patrón:
A.T
是用于转置的Numpy/Scipy语法;只需复制并粘贴我键入的表达式:)好的,谢谢。我在“提取术语(doc)”方面遇到了一些问题,我是否缺少这里的模块?@El_Patrón:这是一个你应该自己定义的函数。如果一个文档,在你的表述中,只是一个术语列表,那么你可以完全跳过它。@larsmans-嗨,你能给我指一下scikit learn中的模块吗,它可以让你计算单词共现矩阵?
vocabulary = {}  # map terms to column indices
data = []        # values (maybe weights)
row = []         # row (document) indices
col = []         # column (term) indices

for i, doc in enumerate(documents):
    for term in doc:
        # get column index, adding the term to the vocabulary if needed
        j = vocabulary.setdefault(term, len(vocabulary))
        data.append(1)  # uniform weights
        row.append(i)
        col.append(j)

A = scipy.sparse.coo_matrix((data, (row, col)))
A.T * A