Matlab 比较两组向量
我有矩阵A和BMatlab 比较两组向量,matlab,vector,Matlab,Vector,我有矩阵A和B size(A) = [n x]; size(B) = [n y]; 现在我需要比较A的每个列向量和B的每个列向量的欧几里德距离。我现在正在使用dist方法 Q = dist([A B]); Q = Q(1:x, x:end); 但它也做了很多不必要的工作(比如分别计算A和B向量之间的距离) 最好的计算方法是什么?您正在寻找的 您应该对矩阵进行转置,因为假设观测值是在行中,而不是在列中。您正在寻找的 您应该对矩阵进行转置,因为假设观测值是在行中,而不是在列中。如果您没有统计工具
size(A) = [n x]; size(B) = [n y];
现在我需要比较A的每个列向量和B的每个列向量的欧几里德距离。我现在正在使用dist
方法
Q = dist([A B]); Q = Q(1:x, x:end);
但它也做了很多不必要的工作(比如分别计算A和B向量之间的距离)
最好的计算方法是什么?您正在寻找的
您应该对矩阵进行转置,因为假设观测值是在行中,而不是在列中。您正在寻找的
您应该对矩阵进行转置,因为假设观测值是在行中,而不是在列中。如果您没有统计工具箱,另一种解决方案是手动计算。例如,一种方法是:
[X, Y] = meshgrid(1:size(A, 2), 1:size(B, 2)); %// or meshgrid(1:x, 1:y)
Q = sqrt(sum((A(:, X(:)) - B(:, Y(:))) .^ 2, 1));
向量Q
中每个值的A
和B
列的索引可通过计算得到:
[X(:), Y(:)]
其中每一行包含一对索引:第一个是矩阵
a
中的列索引,第二个是矩阵B
中的列索引。如果没有统计工具箱,另一个解决方案是手动计算。例如,一种方法是:
[X, Y] = meshgrid(1:size(A, 2), 1:size(B, 2)); %// or meshgrid(1:x, 1:y)
Q = sqrt(sum((A(:, X(:)) - B(:, Y(:))) .^ 2, 1));
向量Q
中每个值的A
和B
列的索引可通过计算得到:
[X(:), Y(:)]
其中每一行包含一对索引:第一个是矩阵
a
中的列索引,第二个是矩阵B
中的列索引。如果没有pdist2,另一个解决方案是将以下数学事实矢量化,这对于非常大的矩阵可能更快:
||x-y | | ^2=| | x | | ^2+| | y | | ^2-2*点(x,y)
其中| | a | |是a的L2范数(欧几里德范数)
评论:
这可能是渐进更快的原因,因为您避免对所有x*y比较进行度量计算,因为您将瓶颈设置为矩阵乘法(矩阵乘法在matlab中高度优化)。您正在利用这一事实,即这是欧几里德距离,而不仅仅是一些未知的度量。如果您没有pdist2,另一种解决方案是将以下数学事实矢量化,这对于非常大的矩阵来说可能更快: ||x-y | | ^2=| | x | | ^2+| | y | | ^2-2*点(x,y) 其中| | a | |是a的L2范数(欧几里德范数) 评论: