我必须处理一个大小为 6004*17842(doc*terms)的大型稀疏矩阵。函数 find() 已尝试获取其行、列和值,结果以 ascii 格式保存。但是这些术语在每个文档中都没有排序。谁能建议我一种对矩阵进行排序并导出排序结果的方法?
问问题
600 次
2 回答
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]);
于 2011-10-04T07:21:01.947 回答
0
内置排序不起作用有什么原因吗?
于 2011-03-13T04:26:17.727 回答