我需要以距离等于特征/尺寸之间的二进制差异数的方式计算两个矩阵元素之间的成对距离。
我想用MATLAB代码做这个而不使用循环。
例如:
假设我想计算A
和B
中实例之间的距离:
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矩阵,其中包含A
和B
中实例的距离,其方式是[1 3 3]
和{之间的距离{1}}将为2:比较要素,当要素等效时,将0添加到距离,当它们不相似时,将距离加1。
所以在这种情况下,
[2 3 4]
C = [3 3 3; 0 2 3].
和A
可能包含字符串而不是数字。
答案 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