我有一个像矩阵
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)
您可以使用该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)