我想在Matlab中实现K-Means聚类,目前我有一个函数如下所示:
function clusters = kmeans(k, data, measure)
...
iterate = true;
while (iterate)
...
if(strcmp(measure, "euclidean")
dists = getEuclideanDists(centroids, data)
elseif(strcmp(measure, "pearson")
dists = getModifiedPearson(centroids, data)
end
...
end
end
我只需要检查一下字符串
measure
等于多少,但是我需要while循环中if语句的主体,因为在while循环中centroids
的值会发生变化,反过来dist
也会发生变化是否有一种更有效的方法使检查仅进行一次,但不断更新dist
的值?还有一个1行/函数可以用来计算数据集中每一行的皮尔逊相关系数吗?
最佳答案
我会在循环之前根据比较定义一个function handle:
function clusters = kmeans(k, data, measure)
...
if(strcmp(measure, "euclidean")
getDists = @getEuclideanDists;
elseif(strcmp(measure, "pearson")
getDists = @getModifiedPearson;
end
iterate = true;
while (iterate)
...
dists = getDists(centroids, data);
...
end
end