0

Rocchio 分類法を使用するために Matlab を使用しています。160個のtxtドキュメントがあります。各ドキュメントの各単語の用語頻度を計算したので、160 個のセルで構成される 1x160 セル配列 "Set" があり、各セルに多数の整数があります (ドキュメント内の各単語の用語頻度)。各整数 i を取得し、次の式 1+log10(i) を適用して、用語の頻度の重み付けを計算しようとしています。次のコードを思いつきました:

function [tfw]=TFWeighting(Set)
size(Set);
TFW=cell(0);
for i=1:size(Set)
    for j=1:size(Set{1,i})
       TFW{1,i}(j,1) = 1+log10(Set{1,i}(j,1));
    end
end
tfw=TFW;
end

まあ、それは機能しますが、最初のセルに対してのみです。他のすべての 159 セルはそのままです。何が問題なのですか?

4

1 に答える 1

3

この行:

for i=1:size(Set)

あなたの犯人です。

size(Set) は [1 160] なので、MATLAB は for i = 1:1; と言います。

あなたがしたい:

for i=1:length(Set)

同じ潜在的なバグが数行後に発生します。

for j=1:size(Set{1,i})
   TFW{1,i}(j,1) = 1+log10(Set{1,i}(j,1));
end

Set の内容を知らずに言うのは難しいですが、内側のループを削除し、MATLAB のベクトルまたは行列全体を一度に処理する機能を使用することで、おそらくこの全体を高速化できると思います。

for i = 1:length(Set)
    TFW{i} =  1 + log10(Set{1,i}(:));
end

超豪華になりたい場合は、ここに1行のソリューションがあります

TFW = cellfun(@(c) 1 + log10(c),Set,'UniformOutput',false);
于 2012-12-02T17:27:43.417 に答える