2

サイズが6004*17842(doc * terms)の大きなスパース行列を処理する必要があります。関数find()は、その行、列、および値を取得しようとしましたが、結果はASCII形式で保存されています。ただし、用語は各ドキュメントで並べ替えられていません。マトリックスを並べ替えて、並べ替えた結果をエクスポートする方法を誰かに提案してもらえますか?

4

2 に答える 2

1

findスパース行列でゼロ以外のエントリを返す方法について質問があるようです。たとえば、次の Matlab コマンドを考えてみましょう

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

Matlab はそのスパース行列を圧縮されたスパース列形式で格納するため、 によって返されるゼロ以外のエントリはfind列ごとに並べ替えられます。つまり、ij、およびxベクトルには、最初の列にすべての非ゼロ エントリが含まれ、次に 2 列目にすべての非ゼロ エントリが含まれ、以下同様です。マトリックスは用語 x ドキュメント マトリックスであるため、最初のドキュメントにすべての用語が表示され、次に 2 番目のドキュメントにすべての用語が表示されるということになります。各列 (ドキュメント) 内で、行 (用語) エントリが並べ替えられます。おそらく、ゼロ以外のエントリを行 (用語) でソートしたいと思うでしょう。つまり、最初の用語を含むすべてのドキュメント、次に 2 番目の用語を含むすべてのドキュメント、というように表示する必要があります。これは実行するだけで非常に簡単です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 に答える