<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />안녕하세요 여러분,
열에서 가장 가까운 값을 검색해야 합니다.이 작업을 수행하는 기능(찾을 수 없는 기능)이 있습니까? 아니면 그렇게 하기 위해 제 루틴을 만들어야 합니까?
고마워, 나탈리
사용
열 = 열( dtFile1, "X_location" );
dtFile1의 데이터 테이블과 같은 JMP 개체는 일반적으로 이해하지 못하는 메시지(예: <Re: 가장 가까운 값 검색
응답이 느린 점 죄송합니다. 나는 다른 것에 사로잡혀 있었다.처음에 두 번째 솔루션을 시도했지만 전혀 작동하지 않습니다.열의 최소값을 찾을 수조차 없습니다 ...무슨 일이야?내 열이 숫자 열이 아닌 문자열 열인 것을 알고 변환했지만 아무 도움이 되지 않는 것 같습니다.
열 ( dt파일1 , "X_위치" ) << 데이터 형식 ( "숫자" ) ;
안부 = dt파일1 << 열 ( "X_위치" ) ;
행 = 잠금 최소 ((( 안부 << getValues ))) ;
KDTable을 사용하는 또 다른 방법.
dt = Open( "$sample_data/big class.jmp" );
// kdtable에 대한 입력 행렬 생성: [95 59, 123 61, 74 55, ...
데이터 = (dt:weight << getasmatrix) || (dt:높이 << getasmatrix);
// 룩업 테이블 생성
조회 = KDTable( 데이터 );
// 예제 조회 수행: 체중 100파운드, 키 60에 가장 가까운 사람 10명을 찾습니다.
// 5의 거리 내에서 인치. (5는 무게 및 파운드와 동일한 "단위"에 있습니다...정규화?)
{rowNumbers, distances} = 조회 << knearestrows( {10, 5}, [100 60] );
// 결과 표시
For( irow = 1, irow <= N Cols( rowNumbers ), irow++,
rowIndex = rowNumbers[irow];
쓰기( dt:name[rowIndex], " w=", dt:weight[rowIndex], " h=", dt:height[rowIndex], " d=", distances[irow], "\!n" );
);
/*:
알프레드 w=99 h=64 d=4.12310562561766
크리스 w=99 h=64 d=4.12310562561766
마크 w=104 h=62 d=4.47213595499958
케이티 w=95 h=59 d=5.09901951359278
따라서 d=4.123은 sqrt((100-99)^2+(60-64)^2)입니다.Katie가 발견되었을 때 반경 5가 초과되어 요청한 10개의 결과가 반경에 의해 제한되었습니다.
KDTable은 K 차원 데이터와 함께 작동합니다. K=1(예: 체중만) 또는 K=3(나이도 포함)만 필요할 수 있습니다.크기 조정/정규화 문제는 키나 체중보다 훨씬 작은 범위를 갖는 이 데이터에서 연령에 따라 더 분명합니다.13세에서 14세까지의 거리는 75파운드에서 80파운드까지의 거리보다 크거나 작습니까?
편집: 무게만 있으면 훨씬 간단해 보입니다.
dt = Open( "$sample_data/big class.jmp" );
// 룩업 테이블 생성
조회 = KDTable( dt:weight << getasmatrix );
// 예제 조회 수행: 100파운드의 무게에 가장 가까운 사람 10명 찾기
{rowNumbers, distances} = 조회 << knearestrows( {10, 5}, [100] );
// 결과 표시
For( irow = 1, irow <= N Cols( rowNumbers ), irow++,
rowIndex = rowNumbers[irow];
쓰기( dt:name[rowIndex], " w=", dt:weight[rowIndex], " d=", distances[irow], "\!n" );
);
/*:
알프레드 w=99 d=1
크리스 w=99 d=1
존 w=98 d=2
마크 w=104 d=4
케이티 w=95 d=5
JOE w=105 d=5
마이클 w=95 d=5
클레이 w=105 d=5
대니 w=106 d=6
다음은 가장 가까운 값의 행을 가져오는 두 가지 방법입니다. 첫 번째는 행 번호의 행렬을 반환하므로 동점을 허용합니다. LocMin() 함수를 사용하는 두 번째 접근 방식의 경우 가장 가까운 고유한 값이 하나 있다고 가정합니다. 첫 번째 인스턴스의 행 번호만 반환하고 관계는 무시합니다.
이름 기본값은 여기 ( 1 ) ;
dt = 열려 있는 ( "$SAMPLE_DATA\Big Class.jmp" ) ;
안부 = 열 ( "무게" ) ;
// 값에 가장 가까운 모든 행 선택
값 = 99.5 ;
디 = 복근 (( 안부 << 값을 얻다 ) - 값 ) ;
행 = 록 ( 디 == 분 ( 디 )) ;
보여 주다 ( 행 ) ;
dt << 행 선택 ( 행 ) ;
// 값에 가장 가까운 첫 번째 행 선택
값 = 112 ;
행 = 잠금 최소 ( 복근 (( 안부 << 값을 얻다 ) - 값 )) ;
보여 주다 ( 행 ) ;
dt << 행 선택 ( 행 ) ;
또는 행렬 벡터를 생성할 수 있습니다.
rowmat=index(1,N 행(dt));
그런 다음 동일한 순위 행렬을 사용하여 정렬합니다.
rowmatsorted = rowmat;
그런 다음 정렬된 값 행렬과 동일한 순서로 행 번호를 포함하므로 값 행렬에서 가장 가까운 값 위치를 얻을 때 rowmatsorted 행렬의 동일한 위치에 행 번호가 표시됩니다.
Jim에게 감사합니다. 훌륭합니다.
나는 이것을 확실히 사용할 수 있습니다.그러나 다음 열에서 해당 값을 얻으려면 행 번호를 알아야 합니다.
함수를 사용하고 가장 가까운 값을 찾은 후 행 번호를 찾기 위해 원본 데이터에서 해당 값을 검색해야 합니까?
나탈리,
다음은 대상 값에 가장 가까운 값을 반환하는 내가 작성한 간단한 함수입니다.
이름 기본값은 여기 ( 1 ) ;
dt = 열려 있는 ( "$SAMPLE_DATA\Semiconductor Capability.jmp" ) ;
가장 가까운 찾기 = 기능 ( { 값 , 안부 } ,
{ ㅏ , 아르 자형 , 아아 , 바로 위 , 바로 아래 , 값 , 안부 } ,
ㅏ = 열 ( 안부 ) << 값을 얻다 ;
아르 자형 = 계급 ( ㅏ ) ;
아아 = 정렬 = ㅏ [ 아르 자형 ] ;
비 = 108 ;
바로 위 = 아아 [ 록 ( 아아 > 값 )[ 1 ]] ;
바로 아래 = 아아 [ 록 ( 아아 < 값 )[ N 행 ( 록 ( 아아 < 비 ) )]] ;
만약에 ( 바로 위 - 값 < 값 - 바로 아래 ,
바로 위 ,
) ;
) ;
보여 주다 ( 최저한의 = 가장 가까운 찾기 ( 108 , "NPN1" )) ;