我正在测量两个相同大小的数据的相似度是20.那就是
A=[0.915450999999999 0.908220499999997 0.900374999999996 0.890547499999996 0.880455499999997 0.868436999999998 0.853787499999999 0.836066499999999 0.815514999999999 0.785924499999999 0.661612000000002 0.208405500000000 0.0495730000000000 0.0148525000000000 0.00604500000000001 0.00292150000000000 0.00150100000000000 0.000730999999999999 0.000431999999999999 0.000222999999999999]
和
B=[0.915971250000000 0.909765000000000 0.902468749999999 0.894108749999999 0.883719999999998 0.871347499999999 0.857477500000000 0.841131250000000 0.821846250000000 0.796526250000000 0.673128750000000 0.208027500000000 0.0520962500000000 0.0187462500000000 0.00634375000000000 0.00295500000000000 0.00134500000000000 0.000226250000000000 0.000150000000000000 0.000113750000000000]
你能帮我在matlab中计算一下吗?如果它们相似则结果显示1,否则0是不同的。 预先感谢。
答案 0 :(得分:3)
MATLAB中用于计算向量之间距离的最佳解决方案是pdist
方法:
http://www.mathworks.com/help/stats/pdist.html
它可以使用多个指标,并且它已经过很好的优化。在文档中,这些指标描述得非常好。
pdist
将所有行向量与矩阵中的所有行向量进行比较,并返回所有这些距离。对于两个向量,您必须将它们放在矩阵中,并且必须使用此矩阵作为输入参数调用pdist
方法:
% A and B are the vectors of your example
X = [A; B];
D = pdist(X, 'cosine'); % D = 1.0875e-005
如果使用包含更多行的矩阵调用pdist
,则输出也将是向量。例如:
% A and B are the vectors of your example
X = [A; A; B; B];
D = pdist(X, 'cosine');
% D = 1.0e-004 * [0 0.1087 0.1087 0.1087 0.1087 0.0000]
与D(1)
(第2行第1行)相比, A
为A
。
D(2)
A
与B
相比(第3行第3行)。
D(3)
与A
进行比较(第1行和第4行)。
B
(第3行第2行)相比, D(4)
为A
。
B
(第4行第2行)相比, D(5)
为A
。
B
(第4行和第4行)相比, D(6)
为B
。
几年前,我们实施了一个模拟环境,其中比较了从虚拟线扫描相机继承的几个向量,并且我们使用了这种方法。它运作得很好。
答案 1 :(得分:1)
根据建议here,您可以使用余弦相似度,它可以找到两个向量之间的角度。类似的向量具有接近1的值,而不相似的向量具有接近于0的值。
function d = cosSimilarity(u, v)
d = dot(u,v)/(norm(u)*norm(v));
end