找出两个向量之间任何元素对之间的最小差异

时间:2014-06-03 04:33:08

标签: matlab

以下哪一项陈述将找出任何一对元素(a,b)之间的最小差异,其中a来自向量A,b来自向量B.

A. [X,Y] = meshgrid(A,B);
   min(abs(X-Y))
B. [X,Y] = meshgrid(A,B);
   min(abs(min(Y-X)))
C. min(abs(A-B))
D. [X,Y] = meshgrid(A,B);
   min(min(abs(X-Y)))

有人可以向我解释一下吗?

4 个答案:

答案 0 :(得分:1)

D. [X,Y] = meshgrid(A,B);
   min(min(abs(X-Y)))

meshgrid将从向量生成两个网格 - X和Y - 这些网格的排列使得X-Y将生成ax-bx的所有组合,其中ax在a中,bx在b中。

表达式的其余部分只是从减法得到的数组得到最小绝对值,这是你想要的值。

答案 1 :(得分:1)

通过说"任何一对元素(a,b)"之间的最小差异,我认为你的意思是你将A和B视为集合,并且你打算在这两组中任何可能的元素对。所以在这种情况下你应该使用你的选项D

[X,Y] = meshgrid(A,B);
min(min(abs(X-Y)))

说明:Meshgrid将一对1-D向量转换为2-D网格。这个链接可以解释我的意思:

http://www.mathworks.com/help/matlab/ref/meshgrid.html?s_tid=gn_loc_drop

因此(X-Y)将给出所有可能的对(a,b)的差异,使得a属于A和b属于B.注意,这将是2-D矩阵。

abs(X-Y)将返回此矩阵中所有元素的绝对值(每对中的绝对差值)。

要找到此矩阵中的最小元素,您必须使用min(min(abs(X-Y)))。这是因为如果Z是矩阵,则min(Z)将Z的列视为向量,返回包含每列中的最小元素的行向量。因此,单个min命令将给出一个行向量,其中每个元素都是该列元素的min。第二次使用min返回此行向量的最小值。这将是整个矩阵中的最小元素。

这可以提供帮助:

http://www.mathworks.com/help/matlab/ref/min.html?searchHighlight=min

如果将A和B视为向量而非集合,则选项C是正确的。在这种情况下,你不会考虑所有可能的配对。您最终会找到(a-b)的最小值,其中a,b在它们相应的向量中处于相同的位置(成对差异)。

答案 2 :(得分:0)

正确的答案是D

允许m = size(A)n = size(B)
你想减去每对(a,b),使得a来自向量A,b来自向量B. meshgrid(A,B)创建两个大小为X Y的矩阵nxm,其中X的行具有向量A,而Y的列与向量{B相同1}}。 因此,Z = X-Y将为您提供一个矩阵,其n*m值对应于从AB取得的每对值之间的差异。现在,您所要做的就是在Z的所有值中找到绝对最小值。

你可以做到这一点     req_min = min(min(abs(z)))

整个代码是

[X Y ] = meshgrid(A,B);
Z=  X-Y;
Z = abs(Z);
req_min = min(min(Z));

答案 3 :(得分:0)

您也可以使用bsxfun代替meshgrid

min(min(abs(bsxfun(@minus, A(:), B(:).'))))

或使用pdist2

min(min(pdist2(A(:),B(:))))