在机器学习、模式识别和数据分析领域,经常需要计算两个数据集之间所有样本对的平方欧氏距离(Squared Euclidean Distance)或马氏距离(Mahalanobis Distance)。直接使用双重循环遍历所有样本对的方式在数据规模较大时效率极低,而向量化运算则是MATLAB的强项。今天我们来深入剖析一个经典的高效实现函数——sqdistance,它能够快速计算成对平方距离,支持三种常见的使用场景。
函数的基本功能
sqdistance函数接受1到3个输入参数,返回一个矩阵D,其中D(i,j)表示数据集A的第i个样本与数据集B的第j个样本之间的平方距离。
当只有一个输入时:计算同一数据集A内部所有样本对的平方欧氏距离(常用于核矩阵或距离矩阵构造)。
当有两个输入时:计算两个不同数据集A和B之间的平方欧氏距离。
当有三个输入时:计算A和B之间的平方马氏距离,第三个参数M为马氏距离的协方差逆矩阵(或任意正定矩阵)。
核心思想是利用平方欧氏距离的展开公式:
[
|x - y|^2 = |x|^2 + |y|^2 - 2x^Ty
]
以及马氏距离的类似展开:
[
(x - y)^TM(x - y) = x^TMx + y^TMy - 2x^TMy
]
通过预先计算每个样本的范数项并利用矩阵乘法,避免了显式的循环,从而实现