2016-07-02 29 views
0

のは、私は、次の2つのベクトルを持っているとしましょう:2つのベクトルの正規化ユークリッド距離を計算するには?

x = [(10-1).*rand(7,1) + 1; randi(10,1,1)]; 
y = [(10-1).*rand(7,1) + 1; randi(10,1,1)]; 

最初の7つの要素は、範囲[1,10]で連続した値です。最後の要素は[1,10]の範囲の整数です。

ここで、xとyのユークリッド距離を計算したいと思います。私は、他のすべての要素が非常に近くなる可能性があるので整数要素は問題だと思うが、整数要素は常に1の間隔を持つ。したがって、整数要素に向かって偏りがあります。

正規化されたユークリッド距離のようなものをどのように計算できますか? Wolfram Alphaによると

答えて

2

、およびthe following answer from cross validated、正規化されたEucledean距離がで定義されています。あなたが使用することにより、MATLABでそれを計算することができます

enter image description here

0.5*(std(x-y)^2)/(std(x)^2+std(y)^2) 

を別の方法として、あなたが使用することができます。

0.5*((norm((x-mean(x))-(y-mean(y)))^2)/(norm(x-mean(x))^2+norm(y-mean(y))^2)) 
+0

のためにオフトピック種類の得ています答えをありがとう。だから私は各次元を正規化しなければならないが、私は2つのデータ点しか持たない。つまり、各次元に2つの値がある。これは、標準偏差(または平均)を使用するためのビットではありませんか? – machinery

+0

ところで、私はzscoreを使用することもできます。つまり、平均を減算し、標準偏差で除算し、次に通常のユークリッド距離を使用しますか? – machinery

+0

あなたの最初のコメントに関して、この定義はR^2のベクトルでもよく定義されています。第二のものについて - それはまた働くかもしれません、私はそれについて考え、あなたに戻ってきます – drorco

1

距離を計算する前にxとyを正規化して、バニラユークリッドで十分です。しかし

x_norm = (x -1)/9;   % normalised x 
y_norm = (y -1)/9;   % normalised y 
dist = norm(x_norm - y_norm); % Euclidean distance between normalised x, y 

あなたの例では

、私は整数要素を有するバイアスのいくつかの並べ替えに寄与するかどうかわからないですが、我々はすでに、スタックオーバーフロー:)

+0

ありがとう。あなたはどのように標準化しましたか(1を引いて9で割る理由)?どちらのstackexchangeにこのtoppicの方がマッチしますか? – machinery

+0

私はクロスバリデーションがこのトピックのためのより良いマッチであると思います。 [0,1]間隔でxを正規化するには、(x - min(x))/(max(x) - min(x))を行う必要があります。 – Chris

関連する問題