5

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からのith要素までの42の距離のセットを与えてくれますB。関数normは行列全体のノルムを正しく計算しますが、私が探しているものではない単一の値を与えてくれます。cdist42の距離での動作は、私が維持したいものです。できれば、完全な行列を解くのとほぼ同じ速度で動作します。だから問題は、Pythonとnumpy / scipyを使用iして形状のあるデータ間の距離を計算する最も効率的な方法は何(n,i)ですか?

ありがとう、スローン

4

2 に答える 2

3

あなたはすでにほとんどのケースを自分でクラックしたと思います。ただし、最後の行の代わりに、次を使用します。

np.sqrt(np.sum(temp**2,0))
于 2012-12-10T18:06:42.987 に答える