矩阵和矢量之间的最小距离

时间:2014-11-16 17:33:58

标签: octave

我有一个维数为NxM的矩阵和一个长度为M的向量。我需要矩阵每行与单个向量之间所有距离的最小距离。

我的方法是使用repmat创建第二个矩阵,然后计算每行之间的距离,但我只得到总距离:

matrix2 = repmat(vector, N, 1);
norm(matrix1 - matrix2, 2)

2 个答案:

答案 0 :(得分:1)

我认为在octave上,您可以使用automatic broadcasting来获取没有repmat-ing的距离或使用norm这样的距离 -

dist = sum((matrix1 - vector).^2,2)

MATLAB上,您可以避免repmatbsxfun这样的行为 -

dist = sum(bsxfun(@minus,matrix1,vector).^2,2)

而且,如果你还想继续repmat,你可以得到这样的距离 -

matrix2 = repmat(vector, N, 1);
dist = sum((matrix1 - matrix2).^2,2)

最后,要获得最小距离和相应的行索引,可以使用min -

[smallest_dist,minrow_ind] = min(dist)

答案 1 :(得分:1)

让我用一个例子来说明这一点:

m = rand (5, 2);  # Your matrix with reference points
v = rand (1, 2);  # Your vector

tmp = bsxfun(@minus, m, v);
d = hypot (tmp(:,1), tmp(:,2)); # Difference between v and all rows in m

# Find samllest distance
[dmin, ix] = min (d)

# visualize it
scatter (m(:,1), m(:,2), 8, "red");
hold on
plot([v(1), m(ix, 1)], [v(2), m(ix, 2)], "-*")
hold off

print ("out.png")

红色气泡是以m为单位的点(2D情况)和" *"一个是v。蓝线连接v与m中的一个,最接近。

Smallest distance