我必须处理一个大的稀疏矩阵,其大小为6004 * 17842(doc * terms)。函数find()已经尝试获取其行,列和值,结果已保存为ascii格式。但是这些术语没有在每个文档中排序。有人可以建议我对矩阵进行排序并输出排序结果吗?
答案 0 :(得分:1)
听起来您对find
如何返回稀疏矩阵中的非零条目有疑问。例如,考虑以下Matlab命令
m = 6004;
n = 17842;
A = sprand(m,n,0.000001);
[i, j, x] = find(A);
由于Matlab以压缩稀疏列格式存储其稀疏矩阵,因此find
返回的非零条目按列排序。也就是说,i
,j
和x
向量首先包含第一列中的所有非零条目,然后是第二列中的所有非零条目,依此类推。由于矩阵是术语x文档矩阵,这意味着您可以看到第一个文档中的所有术语,然后是第二个文档中的所有术语,依此类推。在每个列(文档)中,对行(术语)条目进行排序。也许您希望按行(术语)排序非零条目。也就是说,您希望查看包含第一个术语的所有文档,然后查看包含第二个术语的所有文档,依此类推。只需在转置上执行find
即可轻松实现:
[doc, term, val] = find(A');
要将已排序的条目导出到文本文件,您可以执行以下操作:
dlmwrite('doc-term.txt',[doc term val]);
答案 1 :(得分:0)
是否有built in sort不起作用的原因?