我想在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_a
和X_b
以及||之间的内积|| ^ 2是给定向量的norm_2。
强烈建议您利用bsxfun()
,因为它基于多线程。当然,如果可能的话。
您如何看待:
SEJ(x,y) = bsxfun(@(x, y) (x.*y)./(norm(x)^2 + norm(y)^2 - (x.*y)) , x, y);
提前感谢您的意见。
答案 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));