1

我在 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

我所要做的就是定义迭代变量,然后编写计算部分。但是,我必须在哪里定义变量?如何?

所有的答案将不胜感激。

谢谢你。

4

2 回答 2

2

执行Matlabwhile循环,直到表达式为false。一般设置是这样的:

while <expression>
    <statement>
end

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

LoopCounter = 0;

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

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

于 2013-06-17T12:41:04.650 回答
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);
于 2013-06-17T12:40:26.487 回答