5
所以循环 while length(unique(L)) ~= k 以得到了k个聚类为结束条件,不过一般情况下,这个循环一次就结束了,因为重点在这个循环中。
rand是返回在(0,1)这个区间的一个随机数。在注释%-1所在行,C被扩充了,被扩充的方法类似于下面:
>> C =[];
>> C(1,1) = 1
C =
1
>> C(2,1) = 2
C =
1
2
>> C(:,[1 1 1 1])
ans =
1 1 1 1
2 2 2 2
>> C(:,[1 1 1 1 2])
Index exceeds matrix dimensions.
C中第二个参数的元素1,其实是代表C的第一列数据,之所以在值2时候出现Index exceeds matrix dimensions.的错误,是因为C本身没有第二列。如果C有第二列了:
>> C(2,2) = 3;
>> C(2,2) = 4;
>> C(:,[1 1 1 1 2])
ans =
1 1 1 1 3
2 2 2 2 4
dot函数是将两个矩阵点乘,然后把结果在某一维度相加:
>> TT = [1 2 3 ; 4 5 6];
>> dot(TT,TT)
ans =
17 29 45
>> dot(TT,TT,1 )
ans =
17 29 45
<code>cumsum</code>是累加函数:
>> cumsum([1 2 3])
ans =
1 3 6
>> cumsum([1 2 3; 4 5 6])
ans =
1 2 3
5 7 9
max函数可以返回两个值,第二个代表的是max数的索引位置:
>> [~, L] = max([1 2 3])
L =
3
>> [~,L] = max([1 2 3;2 3 4])
L =
2 2 2
其中~是占位符。
关于bsxfun函数,官方文档指出:
C = bsxfun(fun,A,B) applies the element-by-element binary operation specified by the function handle fun to arrays A and B, with singleton expansion enabled
其中参数fun是函数句柄,关于函数句柄见资料[9]。下面是bsxfun的一个示例:
>> A= [1 2 3;2 3 4]
A =
1 2 3
2 3 4
>> B=[6;7]
B =
6










