Найти ближайшее значение для ссылки в матрице по столбцам - PullRequest
2 голосов
/ 15 апреля 2020

У меня есть пример матрицы 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 ]

1 голос
/ 15 апреля 2020

Вы можете использовать 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
0 голосов
/ 15 апреля 2020

Вы можете попробовать следующий код

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

такой, что

ans =

   12   15   13   13   17
0 голосов
/ 15 апреля 2020

Вы можете использовать 'linear' , чтобы получить линейные индексы:

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

Получить соответствующие элементы в B:

B(MinPos) 

Заполните элементы:

B(MinPps) = MinDif;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...