Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 查找第一个元素最近的行_Matlab_Matrix - Fatal编程技术网

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