Alvi Syahrin
Alvi Syahrin

Reputation: 383

How to count the number of iterations

I'm working with k-means on MATLAB. To process the valid cluster, it needs to do a looping until the cluster position doesn't change any more. The looping will show the iterations process.

I want to count how many looping/iteration happens on that clustering process. Here is the snippet of looping/iteration processing part:

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

All I know that I have to do is define the iteration variable, and then write the calculation part. But, where do I have to define the variable? And how?

All the answers will be so much appreciated.

Thank you.

Upvotes: 1

Views: 13988

Answers (2)

Schorsch
Schorsch

Reputation: 7905

A Matlab while-loop is executed until the expression is false. The general setup is like this:

while <expression>
    <statement>
end

If you want to count the number of times the while loop was entered, the easiest way is to declare a variable outside the loop and incrementing it inside:

LoopCounter = 0;

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

The question whether to increment the LoopCounter before or after the <statement> depends on whether you need it to access vector entries. In that case, it should be incremented before the <statement> because 0 is not a valid index in Matlab.

Upvotes: 2

Hugh Nolan
Hugh Nolan

Reputation: 2519

Define before your loop, update in your loop.

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

Upvotes: 1

Related Questions