가장 가까운 값 검색<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />모두 안녕
열에서 가장 가까운 값을 검색해야 합니다.이 작업을 수행할 수 있는 기능(찾을 수 없음)이 있습니까, 아니면 그렇게 하려면 고유한 루틴을 만들어야 합니까?
고마워, 나탈리
Re: 가장 가까운 값 검색도와주셔서 감사합니다!효과가있다.
Re: 가장 가까운 값 검색사용
col = 열( dtFile1, "X_location" );
JMP 개체(dtFile1의 데이터 테이블과 같은)는 일반적으로 이해하지 못하는 메시지( <Re: 가장 가까운 값 검색
응답이 느려서 죄송합니다. 나는 다른 것에 사로 잡혔다.처음에 두 번째 솔루션을 시도했지만 전혀 작동하지 않습니다.열의 최소값을 찾을 수조차 없습니다 ...무슨 일이야?내 열이 숫자 열이 아니라 문자열 열이라는 것을 알았으므로 변환했지만 아무런 도움이 되지 않는 것 같습니다.
열 ( dtFile1 , "X_위치" ) << 데이터 형식 ( "숫자" ) ;
안부 = dtFile1 << 열 ( "X_위치" ) ;
행 = 최소 위치 ((( 안부 << getValues ))) ;
Re: 가장 가까운 값 검색KDTable을 사용하는 또 다른 방법.
dt = Open( "$sample_data/big class.jmp" );
// kdtable에 대한 입력 행렬 생성: [95 59, 123 61, 74 55, ...
데이터 = (dt:중량 << 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 = 행번호[irow];
Write( 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" );
// 조회 테이블 생성
lookup = KDTable( dt:weight << getasmatrix );
// 예제 조회 수행: 100파운드의 체중에 가장 가까운 10명의 사람 찾기
{rowNumbers, distances} = 조회 << knearestrows( {10, 5}, [100] );
// 결과 표시
For( irow = 1, irow <= N Cols( rowNumbers ), irow++,
rowIndex = 행번호[irow];
Write( 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
조 w=105 d=5
마이클 w=95 d=5
클레이 w=105 d=5
대니 w=106 d=6
Re: 가장 가까운 값 검색다음은 가장 가까운 값의 행을 가져오는 두 가지 방법입니다. 첫 번째는 행 번호의 행렬을 반환하므로 연결을 허용합니다. LocMin() 함수를 사용하는 두 번째 접근법의 경우 하나의 고유한 가장 가까운 값이 있다고 가정합니다. 첫 번째 인스턴스의 행 번호만 반환하고 관계는 무시합니다.
여기에 기본 이름 ( 1 ) ;
dt = 열려 있는 ( "$SAMPLE_DATA\빅 클래스.jmp" ) ;
안부 = 열 ( "무게" ) ;
// 값에 가장 가까운 모든 행 선택
값 = 99.5 ;
디 = 복근 (( 안부 << 값을 얻다 ) - 값 ) ;
행 = 위치 ( 디 == 분 ( 디 )) ;
보여주다 ( 행 ) ;
dt << 행 선택 ( 행 ) ;
// 값에 가장 가까운 첫 번째 행을 선택합니다.
값 = 112 ;
행 = 최소 위치 ( 복근 (( 안부 << 값을 얻다 ) - 값 )) ;
보여주다 ( 행 ) ;
dt << 행 선택 ( 행 ) ;
Re: 가장 가까운 값 검색또는 행렬 벡터를 만들 수 있습니다.
rowmat=index(1,N행(dt));
그런 다음 동일한 순위 행렬을 사용하여 정렬합니다.
rowmatsorted = 행매트;
그런 다음 정렬된 값 행렬과 동일한 순서로 행 번호를 포함하므로 값 행렬에서 가장 가까운 값 위치를 얻을 때 행 정렬된 행렬의 동일한 위치에 행 번호가 있습니다.
Re: 가장 가까운 값 검색Jim에게 감사합니다. 훌륭합니다.
나는 확실히 이것을 사용할 수 있습니다.그러나 행 번호를 알아야 다음 열에서 해당 값을 얻을 수 있습니다.
함수를 사용하고 가장 가까운 값을 찾은 후 원래 데이터에서 해당 값을 검색하여 행 번호를 찾아야 합니까?
Re: 가장 가까운 값 검색나탈리,
다음은 대상 값에 가장 가까운 값을 반환하는 간단한 함수입니다.
여기에 기본 이름 ( 1 ) ;
dt = 열려 있는 ( "$SAMPLE_DATA\Semiconductor Capability.jmp" ) ;
가장 가까운 찾기 = 기능 ( { 값 , 안부 } ,
{ ㅏ , 아르 자형 , 아아 , 바로 위 , 바로 밑 , 값 , 안부 } ,
ㅏ = 열 ( 안부 ) << 값을 얻다 ;
아르 자형 = 계급 ( ㅏ ) ;
아아 = 정렬 = ㅏ [ 아르 자형 ] ;
비 = 108 ;
바로 위 = 아아 [ 위치 ( 아아 > 값 )[ 1 ]] ;
바로 밑 = 아아 [ 위치 ( 아아 < 값 )[ N 행 ( 위치 ( 아아 < 비 ) )]] ;
만약에 ( 바로 위 - 값 < 값 - 바로 밑 ,
바로 위 ,
) ;
) ;
보여주다 ( 최저한의 = 가장 가까운 찾기 ( 108 , "NPN1" )) ;