我想在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

10-07 18:54