对于Matlab中的循环,单元格数组不起作用

时间:2012-12-02 17:23:34

标签: matlab for-loop

我正在使用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个细胞都没有受到影响。 可能是什么问题?

1 个答案:

答案 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);