29

Numpyは初めてですが、ベクトルに格納されているポイント間のユークリッド距離を計算する方法をお聞きしたいと思います。

numpy.arrayがあり、各行がベクトルであり、単一のnumpy.arrayであると仮定します。すべての点とこの単一の点の間のユークリッド距離を計算して、それらを1つのnumpy.arrayに格納できるかどうかを知りたいです。

インターフェースは次のとおりです。

points #2d list of row-vectors
singlePoint #one row-vector

listOfDistances= procedure( points,singlePoint)

このようなものを頂けますか?または、1つのコマンドで単一のポイントを他のポイントのリストとして使用し、最後に距離の行列を取得することは可能ですか?

ありがとう

4

5 に答える 5

29

距離を取得するには、numpy の linalg モジュールの norm メソッドを使用できます。

np.linalg.norm(x - y)
于 2016-08-16T13:41:01.003 に答える
25

ベクトル化を使用できますが、@Karl のアプローチは、numpy 配列ではかなり遅くなります。

より簡単なアプローチは、単に実行することですnp.hypot(*(points - single_point).T)。(転置は、ポイントが 2xN ではなく Nx2 配列であることを前提としています。2xN の場合、.T.

ただし、これは少し読みにくいので、次のように明示的に記述します (いくつかの定型化されたサンプル データを使用して...):

import numpy as np
single_point = [3, 4]
points = np.arange(20).reshape((10,2))

dist = (points - single_point)**2
dist = np.sum(dist, axis=1)
dist = np.sqrt(dist)
于 2010-12-06T21:31:29.537 に答える
6
import numpy as np
def distance(v1, v2):
    return np.sqrt(np.sum((v1 - v2) ** 2))    
于 2016-01-26T07:16:15.840 に答える
3

numpy 配列の各要素に関数を適用するには、numpy.vectorizeを試してください。

実際の計算を行うには、2 つのベクトルの座標ペア間の差 (うわー!) の平方和の平方根が必要です。

を使用zipして座標をペアにsumし、内包を使用して結果を合計できます。次のようになります。

sum((x - y) ** 2 for (x, y) in zip(singlePoint, pointFromArray)) ** 0.5
于 2010-12-06T21:18:05.550 に答える