如何在MATLAB的pdist函数中添加点积作为距离函数
解决MATLAB pdist自定义点积距离函数的尺寸错误问题
错误原因
你遇到的A和B必须尺寸相同错误,是因为dot函数对输入向量的维度方向(行/列)有严格要求,而pdist传递给自定义函数的参数可能在某些场景下触发了维度不匹配的问题,尽管理论上两个行向量的dot运算应该是合法的。
修正方案
用元素逐乘后求和的方式替代dot函数,这种方式更鲁棒,不受向量行/列方向的影响,计算结果和点积完全一致:
mat_vec = zeros(100, 10000); % 100个样本,每行对应一个10000维样本 % 自定义点积计算函数 dotDistance = @(xi, xj) sum(xi .* xj); mat_dist = pdist(mat_vec, dotDistance);
额外注意事项
- 确保
pdist的输入矩阵格式正确:每行代表一个样本。如果你的原始数据是列向量形式(比如10000行×100列),需要先转置矩阵:mat_vec = mat_vec'; - 虽然点积通常作为相似度指标而非距离指标,但
pdist允许自定义任何标量输出的函数,所以这个实现完全符合你的需求。
内容的提问来源于stack exchange,提问作者HyperGroups
相关产品推荐
相关产品推荐

