JSL에서 중첩 목록을 만드는 방법은 무엇입니까?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />지리적 지점(GPS 위치)이 포함된 데이터 테이블이 있습니다. 각 행은 경도, 위도 등의 열이 있는 하나의 위치를 나타냅니다.
저는 이 점들에 대해 클러스터 분석을 하려고 합니다.
미리 정의된 반경(이웃) 내의 모든 포인트를 각 포인트에 대해 검색하고 이를 클러스터라는 목록에 추가하는 알고리즘이 이미 있습니다.
따라서 데이터 테이블의 각 포인트에 대해 해당 포인트(클러스터) 근처에 있는 모든 포인트를 포함하는 목록을 생성할 수 있습니다.
이제 저는 이러한 모든 클러스터 목록을 하나의 목록에 추가한 다음 모든 클러스터 목록을 포함하는 솔루션을 찾고 있습니다.
모든 클러스터를 반복하고 예를 들어 일부 클러스터 등을 병합할 수 있도록 중첩 목록 또는 목록의 목록을 갖고 싶습니다.
jmp/jsl에서도 가능합니까?
당신의 도움을 주셔서 감사합니다!
Re: 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] = 클러스터 목록;
// );
// 앞으로 이동하면 다음과 같은 배열이 있어야 합니다.
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;
listOfClusterLists = {};
while(i <= nItems(listOfPoints), // 목록을 반복하고 선형 목록에 추가합니다.
insertInto(listOfClusterLists, evalList(list(clusterAa[listOfPoints) ])));
나++;
);
show(listOfClusterLists);
// 결과 = listOfClusterLists = {{1, 4, 6, 8}, {2, 9, 6, 4, 1, 7}, {3, 2, 5}};
물론 JMP의 다변량 방법 탭에서 클러스터링 도구를 사용해 볼 수도 있습니다. 저는 이 도구를 사용하여 K-Means 클러스터링을 수행하면서 어느 정도 합리적인 성공을 거두었습니다.
Re: JSL에서 중첩 목록을 만드는 방법은 무엇입니까?원하는 내용에 대한 자세한 설명을 읽은 후 데이터 테이블은 JMP의 XxY 행렬이므로 모든 이동 작업을 수행하는 대신 데이터 테이블에 데이터를 유지하는 방법을 살펴보는 것이 좋습니다. 목록과 목록의 목록에.
"Get Rows Where"를 사용하고 새 열을 생성하여 P에 대해 지정된 반경에서 발견된 다양한 P 값을 저장하면 모든 데이터가 데이터 테이블에 바로 정리됩니다.
Re: JSL에서 중첩 목록을 만드는 방법은 무엇입니까?각 클러스터에는 클러스터가 처음 구축된 지점인 소위 코어가 있습니다.
그래서 저는 점 P(데이터 테이블의 행 번호로 표시됨)를 갖게 되었습니다.
다음 단계는 내 데이터 테이블에서 내 포인트 P 주위의 사전 정의된 반경 내에 있는 모든 포인트를 검색하는 것입니다.
모든 포인트가 확보되면 새 목록 L에 삽입합니다. 그런 다음 점 P를 List L의 위치 1에 삽입합니다.
이제 내 목록 L은 클러스터를 나타냅니다. 클러스터의 핵심은 내 포인트 P입니다. 내 목록은 다음과 같습니다.
L = { <점 P의 행-번호> , }
점 P의 행 번호는 실제로 클러스터/목록의 "키"라고 말할 수 있습니다.
L은 중첩된 목록이 아니라는 점을 언급하고 싶습니다! L은 다른 목록에 삽입됩니다.
ClusterList = { ..., L-2, L-1, L, L+1, L+2, ...}
ClusterList는 중첩된 목록입니다.
클러스터 목록을 생성한 후 이를 반복하고 특정 클러스터를 병합하고 싶습니다.
예를 들어:
P는 클러스터 L의 핵심입니다.
L+2에 P가 포함되어 있으면 L의 모든 점을 L+2에 삽입하고 나중에 L을 삭제합니다.
ClusterList의 다음 목록으로 반복합니다...
Re: JSL에서 중첩 목록을 만드는 방법은 무엇입니까?일종의 "키"가 있으면 연관 배열이 도움이 될 것입니다.귀하의 경우 연관 배열 키가 클러스터일 것이라고 추측합니다.
Re: JSL에서 중첩 목록을 만드는 방법은 무엇입니까?목록은 동질적이지 않은(즉, 요소의 데이터 유형이 동일하지 않은) 목록을 가질 수 있다는 점에서 매우 유연한 데이터 구조입니다. 확실히 '목록의 목록'을 만들 수 있습니다. 예를 들면 다음과 같습니다.
k = 삼 ; // 목록 목록의 항목 수
myList = {};
을 위한 (나= 1 , i<=k, i++,
ㅋㅋ = 무작위정수 ( 1 , 5 ); // 이 목록의 항목 수
아이템리스트 = {};
을 위한 (ii= 1 , ii<=kk, ii++,
에 집어 넣다 (항목목록, 숯 ( 무작위정수 ( 1 , 10 )));
);
인쇄 (항목 목록);
에 집어 넣다 (나의 목록, 평가 ( 평가 목록 ({itemList})));
);
인쇄 (나의 목록);