包含字符串的成对距离矩阵

时间:2013-12-03 01:43:28

标签: matlab distance

我需要以距离等于特征/尺寸之间的二进制差异数的方式计算两个矩阵元素之间的成对距离。 我想用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,这将是一个2x3矩阵,其中包含AB中实例的距离,其方式是[1 3 3]和{之间的距离{1}}将为2:比较要素,当要素等效时,将0添加到距离,当它们不相似时,将距离加1。 所以在这种情况下,

[2 3 4]

C = [3 3 3; 0 2 3]. A可能包含字符串而不是数字。

2 个答案:

答案 0 :(得分:0)

您可以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以计算每个实例的不相似要素的数量。

答案 1 :(得分:0)

具有汉明距离的函数pdist2已经为您执行此操作:

pdist2(A,B,'hamming')

这会将结果显示为不同坐标的百分比。由于您需要数字而不是百分比,请乘以列数:

pdist2(A,B,'hamming')*size(A,2)

ans =

     3     3     3
     0     2     3