将scipy.sparse.csr.csr_matrix转换为MATLAB可读的形式

时间:2013-12-31 20:23:20

标签: matlab scipy

我有一个scipy.sparse.csr.csr_matrix,它是TfidfVectorizer()类的输出。我知道我可以这种方式访问​​该矩阵的各个组件:

所以如果我在这里有这个矩阵:

tf_idf_matrix = vectorizer.fit_transform(lines)

我可以在这里访问各个组件:

tf_idf_matrix.data
tf_idf_matrix.indices
tf_idf_matrix.indptr

如何从Python中保存 - 这样我可以将其加载到MATLAB稀疏矩阵中?或者如何将其更改为密集数组,并将其保存为一个numpy.ndarray文本文件 - 这样我只需将其作为矩阵加载到MATLAB中即可。这个矩阵的大小不是很大 - 它(5000,68k)

请帮忙。感谢

2 个答案:

答案 0 :(得分:1)

MATLAB稀疏构造函数:

  

S =稀疏(i,j,s,m,n,nzmax)使用向量i,j和s来生成m×by-n稀疏矩阵,使得S(i(k),j(k) )= s(k),其中空间分配给nzmax非零

与scipy稀疏相同(包括使用ij添加值的步骤相同)。

  

csr_matrix((data,ij),[shape =(M,N)])   其中data和ij满足关系a [ij [0,k],ij [1,k]] = data [k]

dataij coo_matrix格式的属性。首先,我建议转换tocoo并将三个数组写入.mat文件(scipy.io)。

答案 1 :(得分:0)

假设你在matlab中有这些组件 那么

x = accumarray(indptr+1, ones(size(indptr)),[1,N]);
% N being the number of rows >= max indptr+1

colind = cumsum(x);
res = sparse(colind,indices,data);

应该这样做。

第一部分只是将indptr向量转换为向量,以使每个索引与正确的列号匹配。 (注意indptr可能有重复,这就是为什么需要准确的原因)