私は約144ポイントの地域を持っています。私が達成したいのは、他のすべてのポイントとの距離を測定し、それを配列に格納することです。私はすべての点でこれをやりたいです。可能であれば、このデータを繰り返さないように保存したいと思います。そして、私は次のようなクエリを実行できるはずです-繰り返しなしですべてのポイント間のすべての距離、ポイントno56のすべての距離の合計など。
ポイントの座標を格納する2つの列を持つ3*144配列があります。
考えられる解決策(ただし、繰り返しがないという意味についてはよくわかりません):
X are your points with coordinates x = X(:,1), y = X(:,2)
dist = sqrt(bsxfun(@minus,X(:,1),X(:,1)').^2 + bsxfun(@minus,X(:,2),X(:,2)').^2)
それで
dist(i,j) is the euclidean distance between i and j
もちろん、行列は対称です。関係する複雑さを簡単に減らすことができます。
配列がであるとしましょうA
。ここで、各列は単一の点の座標を格納します。すべてのポイントペアの組み合わせを(繰り返しなしで)取得するには、次を使用しますnchoosek
。
pairs = nchoosek(1:size(A, 2), 2)
次に、次のようにユークリッド距離を計算します。
dist = sqrt(sum((A(:, pairs(:, 1)) - A(:, pairs(:, 2))) .^ 2, 1))
Statistics Toolboxがインストールされている場合は、pdist(A)
代わりに同じ効果を使用できます。
統計ツールボックスがあり、配列Xにすべてのデータがある場合は、
D = pdist(X)
Xのすべての点間のすべてのペアワイズ距離を示します。