0

我想pdist()在 MATLAB 中使用并使用定义如下的自定义函数“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之间的内积 ||^2 是给定向量的 norm_2。X_aX_b

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

你有什么想法:

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

提前感谢您的意见。

4

1 回答 1

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)); 
于 2017-09-29T19:57:26.830 回答