셀을 읽고 쓸 수있는 더 빠른 방법여보세요
전자 집적 회로 장치 (IC)의 생산 데이터가 들어있는 큰 데이터 파일 (250k 행 × 2k 열)이 있습니다.
그리고 나는 결과를 평가하고 데이터의 패턴을 찾는 데 사용하는 jsl 스크립트를 가지고 있지만 큰 데이터 테이블에서는 실행을 완료하는 데 몇 시간이 걸립니다.
사용하고 있던 셀을 읽고 쓰려면 dt : MeasureX [행] 하지만 그 명령은 효율적으로 실행되지 않는 것 같아서 열 (dt, "MeasureX") [intRow] 이 방법은 실행 속도가 20 % 더 빠릅니다.
실행 시간을 향상시키는 트릭이 있습니까? 스크립트가 실행되는 동안 테이블 창 새로 고침을 중지하는 것 ...
감사
제목 : Re : 셀을 읽고 쓸 수있는 더 빠른 방법 @oscarmforero ,
데이터가 숫자이기 때문에. 행렬에 대한 대부분의 행동을 시도하고 수행하는 것이 훨씬 더 빠를 것입니다.
dt = Current Data Table();
Mat = dt << Get As Matrix; // fetches all numeric data as a matrix
행렬을 얻었 으면 논리 조건에 따라 선택을 위해 loc ()를 사용할 수 있습니다. 다음은 더 자세한 예제입니다.
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// Get as Matrix
Mat = dt << Get as Matrix; // Note Matrix will only be 3 columns
// Selecting data in data table
SR = dt << Select Where(:height <= 65) << Get Selected Rows;
dt[SR,"height"] = 65;
dt << Clear Select;
// Selecting data in matrix
SR1 = Loc(Mat[0,2] <= 65);
Mat[SR1,2] = 65;
제목 : Re : 셀을 읽고 쓸 수있는 더 빠른 방법하이 마크
예를 들어, 내가 루프를 사용하여 셀을 읽고 그 값을 다시 비교하여 코드의 한계를 비교하는 코드 (아래 코드는 실행 시간이 오래 걸린다)가 있습니다. 셀 값이 한계를 벗어나면 다른 셀의 값을 읽고 덮어 씁니다.
numDataColumns = Current Data Table() << get column names( Numeric );
main_table = Current Data Table();<BR />
//Loop all columns with parametric data
For( intCol = 1, intCol <= N Items( numDataColumns ), intCol++,
Spec_Lims = Column( numDataColumns[intCol] ) << Get Property( "Spec Limits" );
Spec_USL_num = Try( Spec_Lims["USL"], . );
Spec_LSL_num = Try( Spec_Lims["LSL"], . );
USL_exist = Is Missing( Spec_USL_num ) == 0;
LSL_exist = Is Missing( Spec_LSL_num ) == 0;
//Loop all the selected rows (fails) and count the number of parametric fails and executed tests.
For( intRow = 1, intRow <= N Rows( Data Table( main_table ) ), intRow++,
If( Selected( Row State( Data Table( main_table ), intRow ) ) > 0,
If( Is Missing( Column( main_table, numDataColumns[intCol] )[intRow] ) == 0, //Only check for cells with data
//If both spec limits are available
If(
(USL_exist == 1 & LSL_exist == 1) & (Column( main_table, numDataColumns[intCol] )[intRow] > Spec_USL_num |
Column( main_table, numDataColumns[intCol] )[intRow] < Spec_LSL_num),
Column( main_table, "parFailCount" )[intRow] = Column( main_table, "parFailCount" )[intRow] + 1;<BR /> //log names of failing tests
Column( main_table, "failListNames" )[intRow] = Column( main_table, "failListNames" )[intRow] || Char( numDataColumns[intCol] )
|| ",";
);
//Considered only as executed tests when any of the limits are available.
If( USL_exist == 1 | LSL_exist == 1,
Column( main_table, "parExecutedTests" )[intRow] = Column( main_table, "parExecutedTests" )[intRow] + 1
);
)
)
);
);제목 : Re : 셀을 읽고 쓸 수있는 더 빠른 방법스크립트의 성능을 향상시키는 데는 여러 가지 방법이 있지만 방법은 스크립트의 작업에 따라 다릅니다. 스크립트가하는 일을 " 결과를 평가하고 데이터의 패턴을 찾습니다. ? "