부분 일치를 기반으로 목록을 필터링하는 가장 빠른 방법입니다.<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />부분적으로 일치하는 항목을 기준으로 목록을 필터링하는 더 빠른 방법이 있는지 알아보고 있습니다.아래 코드를 참조하세요. 그런데 이는 모든 목록 개선 이전의 JMP 12에 대한 것입니다.
이름의 기본값은 여기입니다. ( 1 );
dt = 새 테이블 ( "시험" ,
새 열 ( "썸리스트" , 값 설정( 1 :: 100000 )),
사적인
);
목록 = 열 (dt, "썸리스트" ) << 데이터 형식 (문자) << 가치 얻기 ;
닫다 (dt, 저장 없음);
filter_by_partial_match = 기능 ({목록, 값},
dt = 새 테이블 ( "더 빠르게?" ,
새 열 ( "펀리스트" , 문자, 설정값(목록)),
새 열 ( "불" , 공식( 포함 ( 소문자 (:재미목록), 소문자 (값) )) ),
사적인
);
부울 = 위치 ( 열 (dt, "불" )<< 가치 얻기 );
Filtered_list = :funlist[bools];
닫다 (dt, 저장 없음);
필터링_목록;
);
시작_시간 = HP시간 ();
Filtered_list = filter_by_partial_match(목록, "2" );
t_시간 = HP시간 () - 시작 시간;
보여주다 (t_시간, nitems(filtered_list));
더 좋은 방법 아는 사람 있나요?
Re: 부분 일치를 기반으로 목록을 필터링하는 가장 빠른 방법입니다.나는 데이터 테이블이 멀티스레딩(col 수식 등)의 이점을 누리고 있다고 생각합니다. 따라서 JMP 12에서 이 작업을 수행하는 더 빠른 방법이 있다면 놀랄 것입니다.
Re: 부분 일치를 기반으로 목록을 필터링하는 가장 빠른 방법입니다.예, 전체 목록을 소문자로 만드는 데는 확실히 오버헤드가 있을 것입니다.최소한 값을 소문자로 만들 수 있습니다.그러나 이번에도 성능 향상은 그리 크지 않습니다.
Re: 부분 일치를 기반으로 목록을 필터링하는 가장 빠른 방법입니다.전체 목록을 소문자로 만드는 방법은 무엇입니까?그렇게 하는 데 드는 비용이 그로 인해 얻는 이익보다 더 크지 않습니까?
Re: 부분 일치를 기반으로 목록을 필터링하는 가장 빠른 방법입니다.네, 13개 목록 개선이 마음에 듭니다. 하지만 아쉽게도 고객에게는 12를 사용해야 합니다.나는 그들에게 13으로 가라고 말하는 것을 좋아하지만 그것은 아마도 쓸데없는 시도일 것입니다.
Re: 부분 일치를 기반으로 목록을 필터링하는 가장 빠른 방법입니다.
버전 13에서 사용해 보셨나요? 개인 테이블 접근 방식을 사용한 결과는 다음과 같습니다.
t_time = 115828;
N개 항목(filtered_list) = 40951;
루프를 사용한 결과는 다음과 같습니다.
t_time = 61895;
N개 항목(filtered_list) = 40951;
대조적으로, 이것은 각각 버전 12에서 얻은 것입니다:
t_time = 127356;
N개 항목(filtered_list) = 40951;
t_time = 161896168;
N개 항목(filtered_list) = 40951;
Re: 부분 일치를 기반으로 목록을 필터링하는 가장 빠른 방법입니다.열 수식에서 소문자 함수를 제거하고 대신 소문자 목록을 보내고 값을 소문자로 설정하면 약간의 개선이 이루어집니다.그렇지 않으면 꽤 빠르게 보입니다.
Re: 부분 일치를 기반으로 목록을 필터링하는 가장 빠른 방법입니다.빠르네요! 루프 또는 정규식 접근 방식은 근접하지도 않습니다(시도했지만 실패했습니다...).