我有一个维数为NxM的矩阵和一个长度为M的向量。我需要矩阵每行与单个向量之间所有距离的最小距离。
我的方法是使用repmat创建第二个矩阵,然后计算每行之间的距离,但我只得到总距离:
matrix2 = repmat(vector, N, 1);
norm(matrix1 - matrix2, 2)
答案 0 :(得分:1)
我认为在octave
上,您可以使用automatic broadcasting
来获取没有repmat-ing
的距离或使用norm
这样的距离 -
dist = sum((matrix1 - vector).^2,2)
在MATLAB
上,您可以避免repmat
与bsxfun
这样的行为 -
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中的一个,最接近。