【问题标题】:Pairwise distance matrix containing strings包含字符串的成对距离矩阵
【发布时间】:2013-12-03 01:43:27
【问题描述】:

我需要计算两个矩阵元素之间的成对距离,使距离等于特征/维度之间的二进制差异的数量。 我想在不使用循环的情况下使用 MATLAB 代码执行此操作。 例如: 假设我要计算AB 中实例之间的距离:

A = [ 1 2 3 ; 2 3 4]         % (two instances with three features)

B = [ 2 3 4 ; 2 5 6 ; 4 5 6] % (three instances with three features)

我需要计算C,这将是一个包含AB 中实例距离的2x3 矩阵,其中[1 3 3][2 3 4] 之间的距离为2:比较特征,当一个特征相等时,距离加0,当它们不相似时,距离加1。 所以在这种情况下,

C = [3 3 3; 0 2 3].

AB 可能包含字符串而不是数字。

【问题讨论】:

  • 我不明白你的说法:“.. [1 3 3 ] 和 [2 3 4] 之间的距离为 2:比较特征,当特征相似时,距离加 0当它们不同时,距离加 1。”你能澄清一下吗? [1 3 3] 来自哪里?

标签: matlab distance


【解决方案1】:

您可以使用bsxfun@ne(不相等),后跟sum 来计算实例的不同特征的数量:

A = [1 2 3; 2 3 4];
B = [2 3 4; 2 5 6; 4 5 6];
C = squeeze(sum(bsxfun(@ne,A,permute(B,[3 2 1])),2))

C =

     3     3     3
     0     2     3

上面的工作是通过bsxfun(@ne,...) 为每个实例对生成一个逻辑数组测试每个特征的相等性。然后在维度 2 上执行sum 以计算每个实例的不同特征的数量。

【讨论】:

    【解决方案2】:

    具有汉明距离的函数pdist2 已经为您做到了:

    pdist2(A,B,'hamming')
    

    这将结果作为不同坐标的百分比。由于您想要 number 而不是百分比,因此乘以列数:

    pdist2(A,B,'hamming')*size(A,2)
    
    ans =
    
         3     3     3
         0     2     3
    

    【讨论】: