JSL을 사용한 조회 테이블안녕,
전압/시간 데이터 세트에 대한 기초적인 조회 테이블을 구현하기 위해 몇 가지 코드를 작성했습니다. 하지만 내 데이터세트의 크기 때문에 데이터가 얼어붙고 있습니다.
빠른 배경 지식을 바탕으로 각 실행마다 약 1000개의 행(시간 간격)이 있을 수 있고 약 1500개의 실행이 있으므로 총 행은 150만 개입니다. 간단히 말해서 조회 테이블을 사용하기 전에 코드에서 다음을 수행합니다.
- 프로세스 데이터세트
- 데이터에서 dV/dt 계산
- 표를 사용하여 각 개별 실행에 대한 피크 dV/dt를 찾고 dt2라는 새 데이터 테이블을 만듭니다.
- 데이터 세트에 새 열을 생성하여 각 실행의 각 dV/dt 값 옆에 피크 dV/dt 값을 기록합니다.
이 시점에서 내 코드는 dt1을 통해 한 줄씩 진행되기 시작합니다. # dt2에 대해 실행을 정의하는 다양한 테스트 매개변수를 교차 검사하고 피크 dV/dt를 찾아서 dt1의 해당 라인으로 반환합니다.
조회 테이블을 검색하는 코드는 다음과 같습니다.
Current Data Table( dt1 );<BR /><BR />For Each Row(
v = :sample;
w = :temp;
x = :cell;
y = :vicl;
z = :v_bg;<BR />// Find the row in dt2 that matches v/w/x/y/z
row = dt2 << get rows where( :sample == v & :temp == w & :cell == x & :vicl == y & :v_bg == z);<BR />// get values from the dV/dt peak column in dt2
col = Column(dt2, "dvdt_abs_max") << getValues;<BR />// pick out the value of row[n] from that column and save into the active row in dt1
:dVdt_peak = col[row]
);
이 코드는 소규모 세트에 대해 테스트했을 때 작동했지만 완전한 데이터 세트가 있으면 무한 회전 바퀴가 나타났습니다. 나는 이것에 대해 꽤 익숙하지 않으며 이 작업을 수행하는 더 나은 효율적인 방법이 있을 것이라고 확신합니다. 단지 그것을 알아내지 못했을 뿐입니다.
감사해요
대량 맞춤화Re: JSL을 사용한 조회 테이블포인터 주셔서 감사합니다 @David_Burnham , 다음에 'For Each Row'를 사용하게 된다면 기억할 것입니다.
Re: JSL을 사용한 조회 테이블이 기능이 바로 제가 찾던 기능입니다. 감사합니다 @txnelson !
Re: JSL을 사용한 조회 테이블보다 @txnelson '의 응답을 받았지만, 'For Each Row'가 작성하기에는 좋지만 내 경험에 따르면 실행 속도가 매우 느립니다.표준 for 루프, 즉 'For (i=1,i<=nrows(dt),i++')는 테이블 행을 반복하는 훨씬 빠른 방법입니다.
Re: JSL을 사용한 조회 테이블정말 JMP가 이 일을 어렵게 만들고 있는 것입니다.이를 처리하는 가장 쉽고 효율적인 방법은 업데이트 플랫폼을 사용하는 것입니다.문제 없이 150만 행에 대한 조회를 처리해야 합니다.
dt << Update(
With( dt2 ),
Match Columns( :sample == :sample, :temp == :temp, :cell == :cell, :vicl == :vicl, :v_bg == :v_bg ),
Add Columns from Update Table( :dvdt_abs_max )
);
Re: JSL을 사용한 조회 테이블도움이 된다면 이 코드를 사용하는 이유는 행이 피크 dV/dt의 함수인 일부 임계값에 속하는지 여부에 따라 행을 필터링하고 삭제할 수 있기 때문입니다.