我正在使用Matlab来使用Rocchio分类方法。我有160个文本文件。 我已经计算了每个文档中每个单词的术语频率,所以现在有一个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个细胞都没有受到影响。 可能是什么问题?
答案 0 :(得分:3)
这一行:
for i=1:size(Set)
是你的罪魁祸首。
size(Set)是[1 160],因此MATLAB表示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);