私が持っています data = [1 1.2 1.3 1.5 1.8]
このポイントのデータから、前後の最も近い値を見つけたいb = 1.23
どうすればよいですか?
ここに別の方法があります。ベクトルdata
はソートする必要がなく、b
は正または負の値にすることができます。
[~,I] = min(abs(data-b));
c = data(I);
データがソートされている場合は、findを使用できます。
i_lower = find(data <= b,1,'last');
i_higher = find(data >= b,1,'first');
lower_than_b = data(i_lower)
higher_than_b = data(i_higher)
min(abs(data - b))
はどうですか?
この方法は、検索しているb
に複数の要素がある場合のDoubtの回答を一般化したものです。
ind=knnsearch(data',b) c=data(ind)
これは、ind
にリストされたエレメントにdata
で最も近いエレメント(またはエレメント)のインデックス(またはインデックスの配列)b
を返します。
検索されるセットは列ベクトルである必要があるため、データが転置されることに注意してください。複数の要素がある場合は、列ベクトルでもある必要があります。
また、この方法を一般化して、2番目、3番目、4番目...の最近傍を指定することもできます(ドキュメントを参照)。
また、データが高次元である場合にも一般化されます(d
次元の場合、test
およびb
にはd
列が含まれます)。
これは少しハックで非効率的かもしれませんが、私はinterp1
は、次のように単一の最も近い値を検索します。
nearestTo = @(x, xq) interp1(x, x, xq, 'nearest');
nearestTo([2 4 6 8 10], [pi 2*pi 3*pi]) % 4 6 10
nearestTo(sort([2 7 11 3 5]), abs(-3.5)) % 3
data = [1 1.2 1.3 1.5 1.8]
b = 1.23
find(abs(data-b)==min(abs(data-b)))