0

我正在使用 Matlab 使用 Rocchio 分类方法。我有 160 个 txt 文件。我已经计算了每个文档中每个单词的词频,所以现在有一个 1x160 单元格数组“Set”,它由 160 个单元格组成,每个单元格中有多个整数(文档中每个词的词频)。我试图取每个整数 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

如果你想变得超级花哨,这里有一个单行解决方案

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