6

私は約144ポイントの地域を持っています。私が達成したいのは、他のすべてのポイントとの距離を測定し、それを配列に格納することです。私はすべての点でこれをやりたいです。可能であれば、このデータを繰り返さないように保存したいと思います。そして、私は次のようなクエリを実行できるはずです-繰り返しなしですべてのポイント間のすべての距離、ポイントno56のすべての距離の合計など。

ポイントの座標を格納する2つの列を持つ3*144配列があります。

4

3 に答える 3

5

考えられる解決策(ただし、繰り返しがないという意味についてはよくわかりません):

 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

もちろん、行列は対称です。関係する複雑さを簡単に減らすことができます。

于 2013-01-23T15:52:44.993 に答える
2

配列がであるとしましょうA。ここで、各列は単一の点の座標を格納します。すべてのポイントペアの組み合わせを(繰り返しなしで)取得するには、次を使用しますnchoosek

pairs = nchoosek(1:size(A, 2), 2)

次に、次のようにユークリッド距離を計算します。

dist = sqrt(sum((A(:, pairs(:, 1)) - A(:, pairs(:, 2))) .^ 2, 1))

Statistics Toolboxがインストールされている場合は、pdist(A)代わりに同じ効果を使用できます。

于 2013-01-23T16:02:16.860 に答える
1

統計ツールボックスがあり、配列Xにすべてのデータがある場合は、

D = pdist(X)

Xのすべての点間のすべてのペアワイズ距離を示します。

于 2014-05-05T18:35:49.523 に答える