質問: 0 0 0 15 16 10 0 0 0 9.2 10.9 12.2 13.6 15.1 16.6 18.3 20.155053 98.312417 103.010992
回答: いろんなやり方がありそうですが、素直にやるとこんな感じになるかと思います。 100を超えた位置を検出 10を超えた位置を検出 2の中から1に一番近いものを検出 % n以上となった位置のインデックスを取得 idx100 = idx_go_over_n(data, 100) % 100以上 idx10 = idx_go_over_n(data, 10) % 10以上 % 距離を計算 dist = idx100 - idx10; dist(dist<0) = 100; % idx100以上のものは検知しないよう大きい値に置換 [~,mini] = min(dist); % idx100に一番近いidx10を抽出 idx10_100 = idx10(mini); % 元データでのインデックスに振りなおす data(idx10_100) % 10.9 function idx = idx_go_over_n(array,n) b = array > n; diff_b = [0; diff(b)] == 1; idx = find(diff_b); end