如何在 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})));
);
打印(我的列表);