我在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
我只知道我要做的是定义迭代变量,然后编写计算部分。但是,我在哪里定义变量?怎么样?
所有的答案都会非常感激。
谢谢。
答案 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);