在pdist MATLAB中实现Extended Jaccard Similairty

时间:2016-03-16 12:32:21

标签: matlab pdist

我想在MATLAB中使用pdist()并使用自定义函数“Extended Jaccard”定义如下:

 S_EJ(X_a, X_b) = (X_a . X_b) / (||X_a||^2 +  ||X_b||^2 - X_a . X_b)

其中X_a . X_b代表向量X_aX_b以及||之间的内积|| ^ 2是给定向量的norm_2。

强烈建议您利用bsxfun(),因为它基于多线程。当然,如果可能的话。

您如何看待:

  SEJ(x,y) = bsxfun(@(x, y) (x.*y)./(norm(x)^2 + norm(y)^2 - (x.*y)) , x, y);

提前感谢您的意见。

1 个答案:

答案 0 :(得分:0)

你的函数使用了元素乘法。*和除法./,它产生一个矢量输出,而不是一个预期的数字。 你想要点积和常规除法。

承担行向量:

ej_similarity = (vec1*vec2')/(norm(vec1)^2 + norm(vec2)^2 - vec1*vec2'); 

假设列向量:

ej_similarity = (vec1'*vec2)/(norm(vec1)^2 + norm(vec2)^2 - vec1'*vec2); 

广义但有点慢:

ej_similarity = (dot(vec1, vec2)/(norm(vec1)^2 + norm(vec2)^2 - dot(vec1,vec2));