使用
X = [1.8421 4.6076;
5.6586 4.8;
6.3526 3.2909;
2.904 4.6122;
3.232 4.9399;
1.2479 4.9327]
还有
centroids = [3 3;
6 2;
8 5]
我正在尝试找到x中每个点最近的质心。 我正在用八度编程,这是我的代码
K = size(centroids, 1);
idx = zeros(size(X,1), 1); %idx is the vector storing the index of the closest centroid
for e = 1: size(X,1)
difference(1, :) = X(e,:) - centroids(1,:);
min_distance = sum(difference(1,:).^2);
for j = 2:K
difference(j, :) = X(e,:) - centroids(j,:);
distance = sum(difference.^2);
if distance<min_distance
min_distance = distance;
idx(e) = centroids(j);
endif
endfor
endfor
代码有效,但我只能得到
idx = 0 0 0
x的前三个条目
答案 0 :(得分:0)
计算时,您需要保持操作数大小的一致性 距离并正确设置idx:
67
进行此更改后,输出为:
K = size(centroids, 1);
difference=zeros(size(centroids));
idx = zeros(size(X,1), 1); %idx is the vector storing the index of the closest centroid
for e = 1: size(X,1)
difference(1, :) = X(e,:) - centroids(1,:);
min_distance = sum(difference(1,:).^2);
idx(e)=1;
for j = 2:K
difference(j, :) = X(e,:) - centroids(j,:);
distance = sum(difference(j,:).^2);
if (distance<min_distance)
min_distance = distance;
idx(e) = j;
endif
endfor
endfor
idx
答案 1 :(得分:0)
使用 Octave 时,您可能会发现 min 函数很有用;)
[minimum_values, minimum_index] = min(k);
您可以为 idx 使用 minimum_index 值,例如:
idx(i) = minimum_index;
因此,您可以将其进一步减少到:
[minimum_values, idx(i)] = min(k);