找到最接近第一个元素的行

Sou*_*gsu 2 matlab matrix

我有一个像矩阵

a = [ 4.1    45    65    84    84 , 
      4.2    62    78    83    43 , 
      4.3    84    94    93    94 ]
Run Code Online (Sandbox Code Playgroud)

和一个矢量

b = [ 4.123  4.21   4.31   4.19 ] 
Run Code Online (Sandbox Code Playgroud)

对于向量中的每个元素b,我想找到a第一列中的元素最接近该元素的行b.最后,我想连接元素b和相应的行以形成一个新的矩阵c.

所以最终的矩阵看起来像

c = [ 4.123   45    65    84    84 ,
      4.21    62    78    83    43 , 
      4.31    84    94    93    94 ,
      4.19    62    78    83    43 ]
Run Code Online (Sandbox Code Playgroud)

hba*_*rts 7

您可以使用该bsxfun函数创建一个矩阵,该矩阵包含b第一列中每个元素和每个元素之间的差异a:

bsxfun(@minus,b,a(:,1))
ans =
   -0.0230   -0.1100   -0.2100   -0.0900
    0.0770   -0.0100   -0.1100    0.0100
    0.1770    0.0900   -0.0100    0.1100
Run Code Online (Sandbox Code Playgroud)

矩阵的每一行对应于一个元素a(:,1),并且每列对应于一个元素b.即元素(3,1)等于b(1)-a(3,1).

为了找到最近的值,让我们看一下绝对值,abs()并使用该min函数找到每列的最小值.第一个返回值min是每列的最小值,第二个返回值是索引.我们只需要索引,所以我们使用丢弃第一个返回值~.

[~,minRow] = min(abs(bsxfun(@minus,a(:,1),b)))
minRow =
     1     2     3     2
Run Code Online (Sandbox Code Playgroud)

我们现在知道,a我们必须使用哪一行,所以我们可以通过b将一行矩阵连接a到一个矩阵来构造矩阵:

c = [ b.', a(minRow,2:end) ];
c =
    4.1230   45.0000   65.0000   84.0000   84.0000
    4.2100   62.0000   78.0000   83.0000   43.0000
    4.3100   84.0000   94.0000   93.0000   94.0000
    4.1900   62.0000   78.0000   83.0000   43.0000
Run Code Online (Sandbox Code Playgroud)