web-dev-qa-db-ja.com

長さが異なる2つのベクトル間の距離を計算する

同じ長さの2つのベクトル間の距離を計算する方法はいくつかあります。ユークリッド、マンハッタン、ハミングなどです。

異なる長さのベクトル間の距離を計算する方法については疑問に思っています。

14
user1155073

ユークリッド距離の公式は、ユークリッド空間の任意の2点間の距離を求めます。

ユークリッド空間の点は、ユークリッドベクトルとも呼ばれます。

ユークリッド距離の式を使用して、2つの異なる長さのベクトル間の距離を計算できます。

異なる次元のベクトルの場合、同じ原理が適用されます。

低次元のベクトルが高次元空間にも存在するとします。次に、下の次元のベクトルで不足しているすべてのコンポーネントを0に設定して、両方のベクトルが同じ次元になるようにします。次に、前述の距離の式のいずれかを使用して距離を計算します。

たとえば、コンポーネントを含む(a1,a2)の2次元ベクトルAと、コンポーネントを含む(b1,b2,b3)の3次元ベクトルBについて考えてみます。

Aを表現するには、そのコンポーネントを(a1,a2,0)に設定します。次に、次の式を使用して、ユークリッド距離dABの間の距離を求めることができます。

d² = (b1 - a1)² + (b2 - a2)² + (b3 - 0)²

d = sqrt((b1 - a1)² + (b2 - a2)² + b3²)

特定のケースでは、コンポーネントは0または1のいずれかになるため、すべての違いは-10、または1になります。平方差は、0または1のみになります。

コンポーネントを表すために整数または個々のビットを使用している場合、算術の代わりに単純なビットごとの演算を使用できます(^XORまたはexclusive orを意味します)。

d = sqrt(b1 ^ a1 + b2 ^ a2 + ... + b(n-1) ^ a(n-1) + b(n) ^ a(n))

また、Aの末尾のコンポーネントは0であると想定しているため、最終的な式は次のようになります。

d = sqrt(b1 ^ a1 + b2 ^ a2 + ... + b(n-1) + b(n))
9
ardnew

異なる長さのベクトル間の距離を直接計算することはできません。

ここでの提案はすべて、長さが短いベクトルを長さが長いベクトルにマップする関数から始まり、通常どおり計算を行います。

使用できる関数はたくさんあります(実際には無限にあります)。

  • ゼロで埋めます。それが最も簡単なことです。たとえば、車があり、飛行機までの距離を計算する必要がある場合は、車を海面に置きます。
  • どこかで欠損値を調べます。車と飛行機の例では、地理データベースを起動して、経度/緯度から高さを調べます。
  • いくつかの数学関数を使用します。

距離計算の結果は、短いベクトルを長いベクトルに変換する関数に強く依存するため、どの関数を使用するかを誰もが明確にする必要があります。フィールドの誰もが1つの関数だけが意味をなすことに同意しているため、または変換で使用される関数が書き留められているためです。

1
toolforger

長いサイズの配列と同じ長さになるように、短いサイズの配列にゼロを埋め込むという考えは、「一般に」正しい考えではないようです。

たとえば、異なる時点で行われた同じパラメーター(温度、速度、またはオン/オフスイッチのステータスとしてのバイナリパラメーターなど)の測定値の2つのセット(配列、ベクトルなど)がある場合。最初のセットA1が瞬間T1のセットで行われたN回の測定で構成され、2番目のセットA2が瞬間T2のセットで行われたM回の測定(M〜= N)で構成されると仮定します。

T2の分布はT1の分布と任意に異なることに注意してください。したがって、ここでゼロを埋めることは意味がありません。

この場合は、次のようにTと言って、一般的な時刻のセットを使用して補間を使用することをお勧めします。

A1_new =補間(T1、A1、T);

A2_new =補間(T2、A2、T);

ここで、interpolate(x、y、xq)は、変数x、関数y(x)、およびクエリポイントxqとして入力を受け入れます。'interpolate '関数は、補間された出力y(xqを返します。 )。

これで、同じサイズのセットA1_newとA2_newを任意の適切なメジャーで比較できます。ユークリッド距離。

0
Mohamed Hasan

次元nおよびm(n〜= m)の2つのベクトルpおよびq間の平均最小距離を計算することができます。

d = 1/n * sum_i=1:n ( min_j=1:m (p(i) - q(j))) + 1/m * sum_j=1:m (min_i=1:n (p(i) - q(j)))
0
cloudx