我有一个简单的函数来计算两个向量之间的距离,例如距离=点积/两个向量中元素的总和。matlab使用我自己的距离函数pdist
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对角线值,因为我不关心从一行到它自己的距离。
我想你也可以写' d = dot(a(ones(1,size(b,1)),b)/(sum(a)+ sum(b))''我认为'bsxfun'解决方案会更快 –