Matlab实现:判断多行矩阵每行与三个单行矩阵的最相似匹配
矩阵行与参考矩阵的相似性匹配实现
问题背景
现有三个单行参考矩阵:
a = [0.4 0.25 0.5 -0.6 0.2] b = [-0.8 0 0 0.7 -0.25] c = [0.15 -0.4 -0.8 0.3 -0.05]
以及多行目标矩阵:
x = [0.78 0.51 -0.27 -1.18 1.12; -1.28 0.51 -0.27 1.22 1.12; -1.28 0.96 -0.27 -0.22 0.14; 1.30 0.51 0.71 -1.18 0.63; 0.78 -1.32 -1.76 0.25 -1.79]
需要判断x的每一行分别与a、b、c中哪一个最相似,输出类似“第1行最相似于a;第2行最相似于c”的结果。
实现步骤(Matlab环境)
合并参考矩阵
将a、b、c合并为一个3行的参考矩阵,方便批量计算距离:ref = [a; b; c];计算行与行之间的距离
使用pdist2函数(比pdist更适合两个矩阵间的行距离计算),计算x中每一行与ref中每一行的欧氏距离(默认距离类型,也可根据需求更换为余弦距离等):distances = pdist2(x, ref);得到的
distances是一个5×3的矩阵,每一行对应x的一行,每一列对应ref中a、b、c的距离。找到最小距离对应的参考矩阵
对distances的每一行取最小值的索引,再映射到a、b、c:[~, idx] = min(distances, [], 2); labels = {'a', 'b', 'c'};输出结果
循环遍历每一行,输出匹配结果:for i = 1:size(x, 1) fprintf('第%d行最相似于%s;', i, labels{idx(i)}); end
运行结果
执行上述代码后,会输出:
第1行最相似于a;第2行最相似于b;第3行最相似于a;第4行最相似于a;第5行最相似于c;
内容的提问来源于stack exchange,提问作者Katharina
相关产品推荐
相关产品推荐

