You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将基于轮廓系数的Python脚本转换为MATLAB代码?

修正后的MATLAB代码及问题解析

首先明确原Python代码的核心逻辑:循环尝试不同聚类数p,计算所有质心到所有样本的距离总和,结合每个样本到所属质心的距离和,计算自定义指标s并收集到costs数组中。

以下是修正后的完整MATLAB代码:

costs = [];
tic;
for p = 1:10  % 对应Python的range(10)(0-9),因聚类数不能为0,这里调整为1-10;若需完全匹配Python逻辑,可改为p=0:9,但需单独处理p=0的无效聚类情况
    % 调用MATLAB内置kmeans,获取聚类标签、质心、每个样本到各质心的距离矩阵
    [ClusterIndexes, Centroids, ~, D] = kmeans(dataset1, p);
    X = dataset1;
    dist_ji = 0;
    
    % 累加所有质心到所有样本的欧氏距离
    for i = 1:size(X, 1)
        for j = 1:p
            dist_ji = dist_ji + pdist2(Centroids(j,:), X(i,:));
        end
    end
    
    % 计算每个样本到所属质心的距离之和(对应Python的sum(cluster_assignments[:,1]))
    cluster_dist_sum = sum(D(sub2ind(size(D), 1:size(X,1), ClusterIndexes')));
    N = size(X, 1);
    
    % 完成自定义指标计算
    dist_ji = dist_ji - cluster_dist_sum / N;
    a = cluster_dist_sum / (N - 1);
    s = (dist_ji - a) / max(dist_ji, a);
    % 将结果追加到costs数组
    costs = [costs; s];
end
toc;
% 对应Python的x = np.arange(10)
x = 1:10;

原MATLAB代码的问题修正说明:

  • 循环范围错误:内层循环j=1:10改为j=1:p,当前聚类数为p,质心数量为p,无需遍历10个质心。
  • 距离累加逻辑错误:原代码直接赋值dist_ji=pdist2(...),改为累加dist_ji = dist_ji + pdist2(...),匹配Python中dist_ji += euclidean_dist(...)的累加逻辑。
  • 缺失聚类距离和的计算:利用MATLAB kmeans的第四个输出D(样本到所有质心的距离矩阵),结合聚类标签ClusterIndexes,通过sub2ind提取每个样本到所属质心的距离并求和,对应Python中sum(cluster_assignments[:,1])。
  • 未完成指标计算与结果收集:补充dist_ji的修正、a和s的计算,并通过costs = [costs; s]实现Python中costs.append(s)的数组追加逻辑。
  • 语法细节:MATLAB语句结尾需加分号抑制冗余输出,循环和函数调用需严格匹配MATLAB语法规范。

内容的提问来源于stack exchange,提问作者Hammad Younas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 22:30:32