Ipython Notebook を使用しています。私は、3D 空間で約 100 のデータ ポイントを見て、それぞれの距離と互いの角度を把握する必要があるプロジェクトに取り組んでいます。データ ポイントの相関関係を確認し、最終的にデータに何らかの構造 (どこかに隠れている直線) があるかどうかを確認したいと考えています。クラスタリング手法とハフ変換を調べましたが、必要な結果が得られないようです。どんなアイデアでも大歓迎です..ありがとう!
2 に答える
3 次元点間のペアごとの距離を決定する最初の問題については、 を使用できますscipy.spatial.distance.pdist()
。これにより、n 点に対して n(n-1)/2 の距離が生成されます。ポイント間の角度を見つける 2 番目の問題については、よりトリッキーです。それはとても難しいようで、あまり考えたくありません。scipy.spatial.distance.cosine()
ただし、その目的のために、2 つのベクトル間のコサイン距離を決定する を使用できます。
シキットを見たことがありますか?私はそれらが私の仕事に非常に役立つことを発見しました. http://scikit-learn.org/stable/
距離はscipy.spatial.distance.pdist()
、cjohnson318 の回答で述べたように使用して見つけるのが最適です。次のように定義された点 'a' の小さな配列の場合:
import numpy as np
a=np.array([[0,0,0],[1,1,1],[4,2,-2],[3,-1,2]])
ポイント間の距離ユークリッド距離 'D' は、次のように求めることができます。
from scipy.spatial.distance import pdist, squareform
D = squareform(pdist(a))
3D 極座標表記では、ある点から別の点への方向を定義するために 2 つの角度が必要です。方向を示すデカルト単位ベクトルは、おそらくあなたの目的にも役立つようです。これらは次のように見つけることができます:
(a-a[:,np.newaxis,:]) / D[...,np.newaxis]
ポイントからそれ自体へのベクトルがないため、これには対角要素に NaN が含まれます。必要に応じて、これらを使用してゼロに変更できますnp.nan_to_num
実際に角度が必要な場合np.arctan
は、単位ベクトルのコンポーネントに適用することで取得できます。