JSLでネストされたリストを作成するにはどうすればよいですか?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />地理的ポイント (GPS 位置) を含むデータテーブルがあります。 各行は、経度、緯度などの列を持つ 1 つの場所を表します。
これらの点についてクラスター分析を試みています。
各ポイントについて、事前定義された半径 (近傍) 内のすべてのポイントを検索し、それらをクラスターという名前のリストに追加するアルゴリズムがすでにあります。
したがって、データテーブル内の各ポイントについて、そのポイント(クラスター)の近傍にあるすべてのポイントを含むリストを生成できます。
現在、これらすべてのクラスターリストを 1 つのリストに追加し、そのリストにすべてのクラスターリストが含まれるソリューションを探しています。
すべてのクラスターを反復処理して、たとえばクラスターの一部をマージできるように、ネストされたリスト、またはリスト内のリストが必要です。
それはjmp/jslでも可能ですか?
ご協力いただきありがとうございます!
Re: JSL でネストされたリストを作成するにはどうすればよいですか?クリアログ();
// このようなものを見つめているとしましょう
// ポイント(行) -> クラスタリスト
// p1 = {1,4,6,8};
// p2 = {2,9,6,4,1,7};
// p3 = {3,2,5};
// 初期クラスター リストを生成するとき (テーブルの行を反復処理すると思います)
// それらを即時に連想配列に追加します。
// クラスターAa = associativeArray();
// while(ポイントとリストを反復処理し、
// クラスタAa["p1"] = {1,4,6,8}; // ここでのキーは文字列ですが、整数の場合もあります。値 = クラスター リスト
// 例:clusterAa[row] = クラスターリスト;
// );
// 次に進むと、次のような配列が得られるはずです。
クラスタAa = associativeArray({
{"p1"、{1,4,6,8}},
{"p2"、{2,9,6,4,1,7}},
{"p3"、{3,2,5}}
});
listOfPoints = クラスタAa << getKeys; // キーをリストとして取得します {"p1", "p2", "p3"}
i=1;
listOfClusterLists = {};
while(i <= nItems(listOfPoints), // リストを反復処理し、最終的なリストに追加します
insertInto(listOfClusterLists, evalList(list(clusterAa[listOfPoints ])));
i++;
);
show(クラスタリストのリスト);
// 結果 = listOfClusterLists = {{1, 4, 6, 8}, {2, 9, 6, 4, 1, 7}, {3, 2, 5}};
もちろん、JMP の [多変量メソッド] タブにあるクラスタリング ツールを試すこともできます。 このツールを使用して K-Means クラスタリングを実行すると、ある程度の成功を収めました。
Re: JSL でネストされたリストを作成するにはどうすればよいですか?あなたが望むものについての詳細な説明を読んだ後、データテーブルはJMPにとって単なるX×Y行列であるため、すべての移動を行うのではなく、データをデータテーブルに保持することだけを検討することをお勧めします。リストとリストのリストへ。
「Get Rows Where」を使用し、新しい列を作成して、P の指定された半径内で見つかったさまざまな P 値を保存すると、すべてのデータがデータ テーブル内で整理されます。
Re: JSL でネストされたリストを作成するにはどうすればよいですか?各クラスターには、クラスターが最初に構築されるポイントである、いわゆるコアがあります。
したがって、点 P があります (データ テーブルの行番号で表されます)。
次のステップは、データ テーブル内で、点 P の周囲の事前定義された半径内にあるすべての点を検索することです。
すべての点を取得したら、それらを新しいリスト L に挿入します。 その後、点 P をリスト L の位置 1 に挿入します。
さて、私のリスト L はクラスターを表します。 クラスターの中心は私の点 P です。 そして、私のリストは次のようになります。
L = { <点 P の行番号> ,
}
点 P の行番号が実際にはクラスター/リストの「キー」であると言うことができます。
L はネストされたリストではないことに注意してください。 L は別のリストに挿入されます。
クラスタリスト = { ..., L-2, L-1, L, L+1, L+2, ...}
clusterList はネストされたリストです。
クラスターリストを作成したら、それを反復処理して特定のクラスターをマージしたいと思います。
例えば:
P はクラスター L のコアです。
L+2 に P が含まれる場合、L のすべての点を L+2 に挿入し、その後 L を削除します。
クラスタリスト内の次のリストを反復処理します...
Re: JSL でネストされたリストを作成するにはどうすればよいですか?何らかの「キー」がある場合は、連想配列が役立ちます。あなたの場合、連想配列のキーはクラスターになると思います。
Re: JSL でネストされたリストを作成するにはどうすればよいですか?リストは非常に柔軟なデータ構造であり、同種でない (つまり、要素のデータ型が異なる) リストを作成できるほどです。 確かに「リストのリスト」を作成できます。たとえば、次のようになります。
k = 3 ; // リストのリスト内の項目の数
myList = {};
のために(i= 1 、i<=k、i++、
k =ランダム整数( 1 、 5 ); // このリスト内の項目の数
itemList = {};
のために(ii= 1 、ii<=kk、ii++、
挿入する(アイテムリスト、シャア(ランダム整数( 1 、 10 )));
);
印刷する(アイテムリスト);
挿入する(私のリスト、評価(評価リスト({アイテムリスト})));
);
印刷する(私のリスト);