2016-06-12 12 views
0

私はベクターを持っています。 A=[2.29 2.56 2.67 2.44 2.52 1.23]MATLABのベクトル内で最も近い(最も近い)2つの値を見つけるにはどうすればよいですか?

私は、このベクトルに2つの最も近い(ほぼ等しい)値を見つけることに興味があります。

+1

明確にするために、2つの最も近い隣接値、または位置に関係なく最も近い2つの値に興味がありますか? – RTL

+0

@RTL:位置に関係なく、2つの最も近い値。 – erbal

答えて

2

ワンライナーでソリューション

res = A(repmat(find(abs(diff(A))==min(abs(diff(A)))),2,1)+[0;1]); 

よりわかりやすいソリューション

%finds the index with the minimal difference in A 
minDiffInd = find(abs(diff(A))==min(abs(diff(A)))); 
%extract this index, and it's neighbor index from A 
val1 = A(minDiffInd); 
val2 = A(minDiffInd+1); 

結果:

val1 = 2.4400 
val2 = 2.5200 
+0

あなたのソリューションは完璧です。任意の数(2つ以上)の等しいサイズのベクトルで最も近い要素を見つけるために拡張することはできますか?すなわち等しいサイズのベクトル群から、上記の解法で行われたように、ベクトル内ではなく、任意の2つのベクトルの2つの最も近い要素を特定する方法 – erbal

+0

別の質問としてhttp://stackoverflow.com/questions/37773140/how-to-find-closest-nearest-value-within-a-vector-to-another-vector-in-matlabを投稿してください。 – erbal

0

pdist()を使用できます。

としてpdist(A,A)

+0

これに 'stats'ツールボックスが必要であることを付け加えてください。 –

+0

pdistも動作するかもしれませんが、時間の点でコストがかかるようです。 – erbal

関連する問題