如何计算迭代次数

时间:2013-06-17 12:33:05

标签: matlab variables iteration counting

我在MATLAB上使用k-means。要处理有效的集群,需要进行循环,直到集群位置不再发生变化。循环将显示迭代过程。

我想计算在该群集过程中发生了多少循环/迭代。以下是循环/迭代处理部分的片段:

while 1,
    d=DistMatrix3(data,c);  %// calculate the distance
    [z,g]=min(d,[],2);      %// set the matrix g group

    if g==temp,             %// if the iteration does not change anymore
        break;              %// stop the iteration
    else
        temp=g;             %// copy the matrix to the temporary variable
    end
    for i=1:k
        f=find(g==i);
        if f                %// calculate the new centroid
            c(i,:)=mean(data(find(g==i),:),1);
        end
    end
end

我只知道我要做的是定义迭代变量,然后编写计算部分。但是,我在哪里定义变量?怎么样?

所有的答案都会非常感激。

谢谢。

2 个答案:

答案 0 :(得分:2)

执行Matlab while - 循环,直到表达式为false。一般设置如下:

while <expression>
    <statement>
end

如果要计算输入while循环的次数,最简单的方法是在循环外声明一个变量并将其递增到内部:

LoopCounter = 0;

while <expression>
    <statement>
    LoopCounter = LoopCounter + 1;
end

是否在LoopCounter之前或之后递增<statement>的问题取决于您是否需要它来访问向量条目。在这种情况下,它应该在<statement>之前递增,因为0不是Matlab中的有效索引。

答案 1 :(得分:1)

在循环之前定义,在循环中更新。

iterations=0;
while 1,
        d=DistMatrix3(data,c);   % calculate the distance 
        [z,g]=min(d,[],2);      % set the matrix g group

        if g==temp,             % if the iteration doesn't change anymore
            break;              % stop the iteration
        else
            temp=g;             % copy the matrix to the temporary variable
        end
        for i=1:k
            f=find(g==i);
            if f                % calculate the new centroid 
                c(i,:)=mean(data(find(g==i),:),1);
            end
        end
iterations=iterations+1;

end

fprintf('Did %d iterations.\n',iterations);