如何对大型稀疏矩阵进行排序,然后在matlab中导出结果?

时间:2010-09-26 21:22:48

标签: matlab sparse-matrix

我必须处理一个大的稀疏矩阵,其大小为6004 * 17842(doc * terms)。函数find()已经尝试获取其行,列和值,结果已保存为ascii格式。但是这些术语没有在每个文档中排序。有人可以建议我对矩阵进行排序并输出排序结果吗?

2 个答案:

答案 0 :(得分:1)

听起来您对find如何返回稀疏矩阵中的非零条目有疑问。例如,考虑以下Matlab命令

  m = 6004;
  n = 17842;
  A = sprand(m,n,0.000001);
  [i, j, x] = find(A);

由于Matlab以压缩稀疏列格式存储其稀疏矩阵,因此find返回的非零条目按列排序。也就是说,ijx向量首先包含第一列中的所有非零条目,然后是第二列中的所有非零条目,依此类推。由于矩阵是术语x文档矩阵,这意味着您可以看到第一个文档中的所有术语,然后是第二个文档中的所有术语,依此类推。在每个列(文档)中,对行(术语)条目进行排序。也许您希望按行(术语)排序非零条目。也就是说,您希望查看包含第一个术语的所有文档,然后查看包含第二个术语的所有文档,依此类推。只需在转置上执行find即可轻松实现:

  [doc, term, val] = find(A');

要将已排序的条目导出到文本文件,您可以执行以下操作:

  dlmwrite('doc-term.txt',[doc term val]);

答案 1 :(得分:0)

是否有built in sort不起作用的原因?