如何在 JSL 中製作嵌套列表?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />我有一個包含地理點(GPS 位置)的數據表。 每一行代表一個位置,其中列有經度、緯度等。
我正在嘗試對這些點進行聚類分析。
我已經有一個算法,可以搜索預定義半徑(鄰域)內的所有點並將它們添加到名為 cluster 的列表中。
因此,對於數據表中的每個點,我可以生成一個列表,其中包含該點(簇)附近的所有點。
現在我正在尋找一種解決方案,將所有這些簇列表添加到一個列表中,然後該列表包含所有簇列表。
我想要一個嵌套列表或列表中的列表,以便我可以迭代所有集群,例如合併一些集群等。
jmp/jsl 是否可以實現這一點?
感謝您的幫助!
回复:如何在 JSL 中製作嵌套列表?清除日誌();
// 假設你正盯著這樣的東西
// 點(行) -> 簇列表
// p1 = {1,4,6,8};
// p2 = {2,9,6,4,1,7};
// p3 = {3,2,5};
// 當您生成初始集群列表時(我假設您迭代表行)
// 將它們動態添加到關聯數組中。
// clusterAa = associativeArray();
// while(迭代你的點和列表,
// clusterAa["p1"] = {1,4,6,8}; // 這裡的鍵是一個字符串,但也可以是一個整數,值=簇列表
// 例如 clusterAa[row] = Cluster List;
// );
// 向前跳轉你應該有一個像這樣的數組。
clusterAa = associativeArray({
{"p1", {1,4,6,8}},
{"p2", {2,9,6,4,1,7}},
{“p3”,{3,2,5}}
});
listOfPoints = clusterAa << getKeys; // 以列表形式獲取鍵 {"p1", "p2", "p3"}
我=1;
集群列表列表 = {};
while(i <= nItems(listOfPoints), // 迭代列表並添加到最終列表
insertInto(listOfClusterLists, evalList(列表(clusterAa[listOfPoints ])));
我++;
);
顯示(集群列表列表);
// 結果 = listOfClusterLists = {{1, 4, 6, 8}, {2, 9, 6, 4, 1, 7}, {3, 2, 5}};
當然,您也可以嘗試 JMP 中多元方法選項卡下的聚類工具。 我使用此工具進行 K 均值聚類取得了一些相當成功的成果。
回复:如何在 JSL 中製作嵌套列表?在閱讀了您對所需內容的詳細描述後,我建議由於數據表只是 JMP 的 X × Y 矩陣,因此您可能需要研究僅將數據保留在數據表中,而不是執行所有移動操作到列表和列表的列表。
使用“獲取行位置”並創建新列來保存在 P 的給定半徑中找到的各種 P 值,您將在數據表中組織所有數據。
回复:如何在 JSL 中製作嵌套列表?每個集群都有一個所謂的核心,即集群最初構建的點。
所以我有一個點 P (由我的數據表的行號表示)。
下一步是搜索數據表中位於點 P 周圍預定義半徑內的所有點。
當我擁有所有點時,我將它們插入到新列表 L 中。 然後我將點 P 插入到列表 L 的位置 1 處。
現在我的列表 L 代表一個簇。 簇的核心是我的P點。 我的清單如下所示:
L = { <點 P 的行號> , < P 周圍半徑 R 內所有點的行號> }
可以說,點 P 的行號實際上是簇/列表的“鍵”。
我應該提到,L 不是嵌套列表! L 被插入到另一個列表中。
clusterList = { ..., L-2, L-1, L, L+1, L+2, ...}
clusterList 是嵌套的 List。
創建集群列表後,我想迭代它並合併某些集群。
例如:
P是簇L的核心。
如果L+2包含P,則將L中的所有點插入到L+2中,然後刪除L。
迭代 clusterList 中的下一個列表...
回复:如何在 JSL 中製作嵌套列表?如果您有某種“密鑰”,那麼關聯數組會很有幫助。我猜測在你的情況下關聯數組鍵將是簇。
回复:如何在 JSL 中製作嵌套列表?列表是一種非常靈活的數據結構,您可以擁有不同質的列表(即,其中的元素不具有相同的數據類型)。 您當然可以創建一個“列表列表” - 例如:
k = 3 ; // 列表列表中的項目數
我的列表 = {};
為了(我= 1 , i<=k, i++,
kk=隨機整數( 1 , 5 ); // 此列表中的項目數
項目列表 = {};
為了(二= 1 , ii<=kk, ii++,
插入(項目列表,查爾(隨機整數( 1 , 10 )));
);
打印(項目列表);
插入(我的列表,評估(評估列表({itemList})));
);
打印(我的列表);