【问题标题】:Find closest value to reference in matrix, columnwise在矩阵中查找最接近参考的值,按列
【发布时间】:2020-04-15 22:56:46
【问题描述】:

我有一个示例矩阵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))

但这并没有给我我想要的。

【问题讨论】:

    标签: arrays matlab


    【解决方案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
    

    【讨论】:

      【解决方案2】:

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

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

      获取B中对应的元素:

      B(MinPos) 
      

      填充元素:

      B(MinPps) = MinDif;
      

      【讨论】:

        【解决方案3】:

        你可以试试下面的代码

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

        这样

        ans =
        
           12   15   13   13   17
        

        【讨论】:

          猜你喜欢
          • 2019-02-21
          • 2017-10-05
          • 1970-01-01
          • 2021-11-26
          • 1970-01-01
          • 2021-11-20
          • 1970-01-01
          相关资源
          最近更新 更多