2016-02-09 3 views
0

У меня есть две матрицы. G1найти ближайшую точку к данной точке

G1 = 
    80.00 
    79.43 
    78.89 
    78.38 
    77.90 
    77.45 
    77.03 
    76.63 

и

G2 =  NaN  NaN  NaN 
     NaN  NaN  NaN 
     NaN  79.11  NaN 
     NaN  78.64  NaN 
     NaN  78.13  78.14 
     77.46  NaN  77.66 
     77.07  77.08  NaN 
     76.74  NaN  NaN 

Я хочу, чтобы результирующая матрица, которая имеет размер 8 * 1. Более того, матричные элементы G2 сравниваются с G1, а ближайшие элементы G2 - G1 заполняются в желаемой матрице. например, первая из строк G2 имеет NaN, поэтому она сохраняет NaN. 4-я строка G2 имеет два значения, эти значения следует сравнивать с 4-м элементом G1, а ближайшее значение shoud должно быть заполнено в матрице результатов. Когда есть единственное значение, которое должно оставаться только таким. Когда в матрице должно быть заполнено более двух значений, чем ближайшее значение shoud.

Ниже представлен желаемый результат. Как сделать это более динамично. Я просто сделал это вручную.

Result = NaN 
      NaN 
      79.11 
      78.64 
      78.14 
      77.46 
      77.07 
      76.744 
+0

Ваши примеры не имеют смысла. 'G1' имеет 8 строк,' G2' имеет 7 строк, а ваш 'Result' имеет 8 строк. – excaza

+1

Извините, я пропустил один ряд. Я только что обновил его. Спасибо вам за ваш ответ :) –

+0

Откуда вы берете '79.1168'? Я не вижу его в ваших исходных данных. – Daniel

ответ

3

Попробуйте это:

dist = abs(bsxfun(@minus,G2,G1)) 
[~,col] = min(dist,[],2); 
Result = diag(G2(:,col)) 
+0

Я имею в виду выход shoud be 8 * 1. Извините за недопонимание. –

+1

@MayankLakhani см. Мое редактирование ранее - вам нужно добавить 'diag' (или использовать' sub2ind', если ваша матрица действительно большая) – Dan

+0

Спасибо Dan. Это работает :) –

Смежные вопросы