Python: 如何在Python中存储稀疏矩阵?

9 投票
7 回答
11822 浏览
提问于 2025-04-16 12:48

我在Python中使用稀疏矩阵得到了一个输出,现在我想把这个稀疏矩阵存到我的硬盘上,我该怎么做呢?如果需要创建一个数据库,那我又该如何去做呢?

这是我的代码:

import nltk
import cPickle
import numpy
from scipy.sparse import lil_matrix
from nltk.corpus import wordnet as wn
from nltk.corpus import brown
f = open('spmatrix.pkl','wb')
def markov(L):
    count=0
    c=len(text1)
    for i in range(0,c-2):
        h=L.index(text1[i])
        k=L.index(text1[i+1])
        mat[h,k]=mat[h,k]+1//matrix
    cPickle.dump(mat,f,-1)



text = [w for g in brown.categories() for w in brown.words(categories=g)]
text1=text[1:500]
arr=set(text1)
arr=list(arr)
mat=lil_matrix((len(arr),len(arr)))
markov(arr)
f.close()

我需要把这个“mat”存到一个文件里,并且能够通过坐标来访问矩阵的值。

稀疏矩阵的结果是这样的:`稀疏矩阵的结果是这样的:

(173, 168) 2.0 (173, 169) 1.0 (173, 172) 1.0 (173, 237) 4.0 (174, 231) 1.0 (175, 141) 1.0 (176, 195) 1.0 

但是当我把它存到文件里,然后再读取的时候,得到的结果是这样的:

(0, 68) 1.0 (0, 77) 1.0 (0, 95) 1.0 (0, 100)    1.0 (0, 103)    1.0 (0, 110) 1.0 (0, 112)   2.0 (0, 132)    1.0 (0, 133)    2.0 (0, 139)    1.0 (0, 146)    2.0 (0, 156)    1.0 (0, 157)    1.0 (0, 185)    1.0

7 个回答

2

pyTables 是一个用Python操作HDF5数据模型的工具,它在处理数据时非常受欢迎,并且与NumPy和SciPy这两个库配合得很好。使用pyTables,你可以访问数据库中的数组的一部分,而不需要把整个数组都加载到内存中。

我对稀疏矩阵没有具体的经验,快速搜索了一下也没有找到明确的信息来确认稀疏矩阵是否被支持。

7

假设你有一个 numpy 的 matrixndarray,你的问题和标签都暗示了这一点。你可以使用 dump 方法和 load 函数来处理它们:

your_matrix.dump('output.mat')
another_matrix = numpy.load('output.mat')
4

注意: 这个回答是针对更新后的问题,问题中现在提供了代码。

你不应该在你的函数里调用 cPickle.dump()。应该先创建稀疏矩阵,然后再把它的内容保存到文件里。

可以试试:

def markov(L):
   count=0
   c=len(text1)
   for i in range(0,c-2):
       h=L.index(text1[i])
       k=L.index(text1[i+1])
       mat[h,k]=mat[h,k]+1 #matrix


text = [w for g in brown.categories() for w in brown.words(categories=g)]
text1=text[1:500]
arr=set(text1)
arr=list(arr)
mat=lil_matrix((len(arr),len(arr)))
markov(arr)
f = open('spmatrix.pkl','wb')
cPickle.dump(mat,f,-1)
f.close()

撰写回答