Matlab 查找第一个元素最近的行
我有一个矩阵Matlab 查找第一个元素最近的行,matlab,matrix,Matlab,Matrix,我有一个矩阵 a = [ 4.1 45 65 84 84 , 4.2 62 78 83 43 , 4.3 84 94 93 94 ] 和向量一样 b = [ 4.123 4.21 4.31 4.19 ] 对于向量b中的每个元素,我想找到a中的行,第一列中的元素最接近b中的该元素。 最后,我想将b的元素与相应的行连接起来,形成一个新的矩阵c 最后的矩阵看起来像 c = [ 4.123
a = [ 4.1 45 65 84 84 ,
4.2 62 78 83 43 ,
4.3 84 94 93 94 ]
和向量一样
b = [ 4.123 4.21 4.31 4.19 ]
对于向量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 ]
您可以使用该函数创建一个矩阵,其中包含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
矩阵的每一行对应于a(:,1)
中的一个元素,每一列对应于b
中的一个元素。i、 e.元素(3,1)
等于b(1)-a(3,1)
要查找最接近的值,让我们查看绝对值abs()
,并使用函数查找每列的最小值。min
的第一个返回值是每列的最小值,第二个返回值是索引。我们只需要索引,所以我们使用~
放弃第一个返回值
[~,minRow] = min(abs(bsxfun(@minus,a(:,1),b)))
minRow =
1 2 3 2
我们现在知道必须使用哪一行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