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

如何使用嵌套循环移除矩阵对角项后计算样本成对距离的中位数

核矩阵计算与中位数统计问题解答

核矩阵维度问题解答

可以从100×1的输入得到100×100的矩阵。核矩阵本身的维度与样本数量一致,为n×n格式,其中第i行第j列的元素对应第i个和第j个样本的核函数计算结果。你只需要遍历所有i、j组合,用你提到的3维空间点积方法计算k(X[i], X[j]),把结果填入对应位置即可得到目标矩阵。

中位数计算代码修复

你原有代码存在以下问题:

  • 函数定义名和调用名不一致,定义的是median_cal,调用时写的是median_distance
  • dist初始化代码被注释,且列表推导式没有实际给dist元素赋值的逻辑,空跑无效果
  • 错误将已生成的距离矩阵传入distance.pdist,该方法本身是用来计算输入样本的两两距离,不需要二次处理已生成的距离矩阵

修复后代码

首先导入依赖:

import numpy as np
from scipy.spatial import distance

按你的要求初始化dist变量的实现:

def median_cal(X):
    # X: n*1 matrix
    # 初始化n×n维度的dist空矩阵
    dist = np.empty((len(X), len(X)), float)
    n = len(X)
    # 填充dist矩阵为两两样本的欧氏距离
    for i in range(n):
        for j in range(n):
            dist[i, j] = np.linalg.norm(X[i] - X[j])
    
    # 提取非对角元素(移除i=j的对角项)
    non_diag_items = dist[~np.eye(n, dtype=bool)]
    # 计算中位数
    h = np.median(non_diag_items)
    return h

h = median_cal(np.array([[1],[2],[4]]))
print('final: h')
print(h)
# 输出为2.0,符合预期

内容的提问来源于stack exchange,提问作者Adam Rainah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:45:10