在矩阵中按列查找与参考最接近的值

时间:2020-04-15 10:52:40

标签: arrays matlab

我有一个示例矩阵A

A = [1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8]

A =

 1     2     3     4     5
 2     3     4     5     6
 3     4     5     6     7
 4     5     6     7     8

我想找到每行最接近的值。 因此,如果X = 3.4

[MinDif,MinPos]=min(abs(A-X));

MinPos =

     3     2     1     1     1

现在我想将这些位置填充到第二个矩阵B中。因此,位置(3,1)(2,2)(1,3)(1,4)(1,5)。

B = [10 11 12 13 14 ;11 12 13 14 15 ; 13 14 15 16 17; 14 15 16 17 18]

B =

    10    11    12    13    14
    11    12    13    14    15
    13    14    15    16    17
    14    15    16    17    18

我希望答案是

ans =

    13 12 12 13 14

我尝试过

B(MinPos,find(MinPos))

但这并不能满足我的需求。

3 个答案:

答案 0 :(得分:1)

您可以使用sub2ind

% given
A = [1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8]
B = [10 11 12 13 14 ;11 12 13 14 15 ; 13 14 15 16 17; 14 15 16 17 18]
X = 3.4
[~, MinPos] = min(abs(A-X));

sz = size(A);                      % size of input
idx = sub2ind(sz,MinPos,1:sz(2));  % linear indices correlated with indices of minima
out = B(idx);                      % linear indexing of output

out =  13    12    12    13    14

答案 1 :(得分:0)

您可以使用'linear'选项来获取线性索引:

[MinDif,MinPos]=min(abs(A-X), [], 1, 'linear');

获取B中的相应元素:

B(MinPos) 

填充元素:

B(MinPps) = MinDif;

答案 2 :(得分:0)

您可以尝试以下代码

B((size(B,1)-1)*(1:length(MinPos)) + MinPos)

这样

ans =

   12   15   13   13   17
相关问题