OK最近、このscipy.spatial.distance.cdist
コマンドが、ソースと宛先の2つのベクトル配列間の完全な距離行列を解くのに非常に速いことを発見しました。参照:numpyを使用してユークリッド距離を計算するにはどうすればよいですか?
2つの同じサイズのアレイ間の距離を解決するときに、これらのパフォーマンスの向上を再現しようと思いました。前のリンクに示されているように、2つのSINGLEベクトル間の距離は計算がかなり簡単です。ベクトルを取ることができます:
import numpy as np
A=np.random.normal(size=(3))
B=np.random.normal(size=(3))
次に、「numpy.linalg.norm」を使用します。
np.linalg.norm(A-B)
と同等です
temp = A-B
np.sqrt(temp[0]**2+temp[1]**2+temp[2]**2)
my_distance = distance_between( A[i], B[i] ) for all i
ただし、2番目の解が完全に機能する2セットのベクトル間の距離を知りたい場合は、これはうまく機能します。その中で予想通り:
A=np.random.normal(size=(3,42))
B=np.random.normal(size=(3,42))
temp = A-B
np.sqrt(temp[0]**2+temp[1]**2+temp[2]**2)
i
のth要素A
からのi
th要素までの42の距離のセットを与えてくれますB
。関数norm
は行列全体のノルムを正しく計算しますが、私が探しているものではない単一の値を与えてくれます。cdist
42の距離での動作は、私が維持したいものです。できれば、完全な行列を解くのとほぼ同じ速度で動作します。だから問題は、Pythonとnumpy / scipyを使用i
して形状のあるデータ間の距離を計算する最も効率的な方法は何(n,i)
ですか?
ありがとう、スローン