語彙 (文字列のベクトル) と文でいっぱいのファイルがあります。各文に各単語が含まれる頻度を示すマトリックスを作成したいと考えています。私の現在の実装は非常に遅く、これはもっと速くなると信じています。10 語程度の 1 文を書くのに 1 分近くかかります。
これがなぜなのか、どのようにスピードアップするのか説明できますか?
注: 他の方法ではメモリに収まらないため、スパース行列を使用します。語彙のサイズは約 10.000 語です。プログラムを実行しても作業メモリが使い果たされることはないので、それが問題になることはありません。
関連するコードは次のとおりです。totalLineCount、vocab、vocabCount など、言及されていない変数は以前に初期化されています。
% initiate sentence structure
wordSentenceMatrix = sparse(vocabCount, totalLineCount);
% fill the sentence structure
fid = fopen(fileLocation, 'r');
lineCount = 0;
while ~feof(fid),
line = fgetl(fid);
lineCount = lineCount + 1;
line = strsplit(line, " ");
% go through each word and increase the corresponding value in the matrix
for j=1:size(line,2),
for k=1:vocabCount,
w1 = line(j);
w2 = vocab(k);
if strcmp(w1, w2),
wordSentenceMatrix(k, lineCount) = wordSentenceMatrix(k, lineCount) + 1;
end;
end;
end;
end;