2010-09-26 23 views
2

我必须处理大小为6004 * 17842(doc * terms)的大型稀疏矩阵。函数find()试图获取它的行,列和值,结果以ascii形式保存。但这些条款并未在每个文件中排序。任何人都可以建议我一种方法来排序矩阵和导出排序的结果吗?如何排序大型稀疏矩阵,然后在matlab中输出结果?

+5

定义你的“之类的”的意思。 – 2010-09-26 21:42:03

+0

是的;这些是你正在谈论的文本字符串?如果是这样,我只是想知道为什么你选择MATLAB来做到这一点? – Gilead 2010-09-26 21:54:52

回答

1

听起来好像你有一个关于find如何返回稀疏矩阵中的非零项的问题。例如,考虑下面的指令Matlab的

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

由于Matlab的存储在压缩稀疏列格式其稀疏的矩阵,通过find返回的非零项由列排序。也就是说,i,jx向量首先包含第一列中的所有非零条目,然后是第二列中的所有非零条目,依此类推。由于您的矩阵是一个术语x文档矩阵,这意味着您可以看到第一个文档中的所有术语,然后查看第二个文档中的所有术语,依此类推。在每列(文档)中,行(词)条目被排序。也许你想有按行(term)排序的非零条目。也就是说,您想要查看包含第一个术语的所有文档,然后查看包含第二个术语的所有文档,依此类推。这是很容易做到的只是转置执行find

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

要排序项导出到文本文件,你可以这样做:

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

OP太糟糕了最后一次看到2010年12月2日...如果这是她/他的意思,我们不太可能会收到反馈。 – 2011-10-04 07:28:56