我有一个简单的函数来计算两个向量之间的距离,这样距离=点积/两个向量中元素的总和。
function d = simpleDistance(a,b)
d = dot(a,b)/ (sum(a) + sum(b));
end
例如:simpleDistance([1 2], [3 4]) = (3 + 8) / (3 + 7) = 11/10 = 1.1
鉴于这个小矩阵r,我想计算r中每两行之间的相似性(距离= simpleDistance)
r =
1 2
5 0
3 4
我想使用pdist函数,而不是两个嵌套循环,因为它更快!
n = size(r,1);
dist = squareform(pdist(r,@simpleDistance)); % distance matrix
dist(1:n+1:end) = inf; % self-distance doesn't count
但是,我收到此错误
Error using pdist (line 373)
Error evaluating distance function 'simpleDistance'.
Caused by:
Error using dot (line 34)
A and B must be same size.
对于上面的矩阵r,我希望dist矩阵是
dist =
Inf 0.625 1.1
0.625 Inf 1.25
1.1 1.25 Inf
注意:在循环或填充矩阵后,我用inf填充对角线值,因为我不关心从一行到它自身的距离。
答案 0 :(得分:2)
您传递给pdist
的功能必须
作为参数,1×n矢量XI,对应于单行X,和m2-by-n矩阵XJ,对应于多行X. distfun必须接受具有任意数量的X的矩阵XJ。行。 distfun必须返回距离为d2的m2-by-1向量,其第k个元素是XI和XJ之间的距离(k,:)
所以:
d = sum(bsxfun(@times,a,b),2) ./ (sum(a,2) + sum(b,2));