2017-07-20 4 views
-1

私は水平なエッジポイントの行列を与えられます。私がしたいのは、これらのエッジポイントを結合し、可能であればそれらの間の距離を見つけることです。Matlab - いくつかのポイントをグループ化し、これらのグループに従ってソートする

以下の行列Mは、xy座標平面上のエッジ点を表しているとします。併せて示す互いに近接しているポイントを意味している

M=[15 1 
    16 1 
    17 2 
    18 2 
    19 1 
    20 3 
    21 1 
    16 20 
    17 21 
    18 20 
    19 22 
    20 23 
    21 20 
    94 2 
    95 3 
    96 4 
    97 3 
    98 2]; 

:私は何をしたいか

M=[15 1 
    16 1 
    19 1 
    21 1 
    17 2 
    18 2 
    94 2 
    98 2 
    20 3 
    95 3 
    97 3 
    96 4 
    16 20 
    18 20 
    21 20 
    17 21 
    19 22 
    20 23]; 

は、区分的なファッションに近いポイントを組み合わせて、以下の行列を取得することです。 M = sortrows(M、1)またはM = sortrows(M、2)を使用したソートでは、ポイントをグループ化しません。私は何を使用すべきですか?

+0

ポイントを示すグラフと出力したい図面はf一緒に。それは意味をなさない。座標をソートすることがクラスタを作成するための解決策ではないことも明らかではありません。あなたは何を知りたいのですか?スケッチと座標だけでなく、いくつかのコードを提供します。これはコーディングサービスではありません。 – Piglet

+0

@ピググルそうです、それに応じて質問を編集します。 –

+0

@ピグレット私はコード全体を意図していなかったので、そのような問題をどのようにモデル化するのか分かりませんでした。 –

答えて

0

これはクラスタリングの問題であり、並べ替えの問題ではありません。 kmeanskを実行してください。これは、互いに密接しているデータのグループを見つけるよく知られた方法です)。

MATLAB Statistics and Machine Learning Toolboxをお持ちの場合は、組み込みのkmeans関数を使用してください(インストール済みのツールボックスを表示するにはverを実行してください)。クラスタ数を指定する必要があります。投稿したような単純なデータセットの場合、これは散布図(scatter(M(:,1), M(:,2)))を見ることで簡単に実行できます。

ランの各点が属するクラスタを含むベクターを出力K平均クラスタリングを、:

clusters = kmeans(M, 3) 

は、その列によってMソートの第3列としてこれを加えます。第3列は、各点がどのクラスタに入っているかを示す(例えば、第3列の1を含むすべての点がグループである)。あなたは、からこのファイルをMATLAB統計と機械学習ツールボックスのパッケージを持っていない場合は

M(M(:,3) == 1, :)

16 20  1 
18 20  1 
21 20  1 
17 21  1 
19 22  1 
20 23  1 

:あなたは、論理インデックスを使用して単一のグループ内のポイントを選択することができ

M(:,3) = clusters 
groupedData = sortrows(M, 3) 

16 20  1 
18 20  1 
21 20  1 
17 21  1 
19 22  1 
20 23  1 
94  2  2 
98  2  2 
95  3  2 
97  3  2 
96  4  2 
15  1  3 
16  1  3 
19  1  3 
21  1  3 
17  2  3 
18  2  3 
20  3  3 

FileExchangeは良い置換えになる可能性があります。Kmeans Clustering by Mo Chen

関連する問題