for 루프 없이 큰 목록을 빠르게 만드는 방법이 있나요?많은 프로그래밍 언어에는 어떤 형태가 있습니다.
예를 들어 1부터 100까지 나열:
list = 1:100,
또는
list = range(1,100)
또는
list = {1..100}
또는
list = seq(1,100)
알려줘요! 스크립팅 가이드에서 아무것도 찾을 수 없습니다.
Re: for 루프 없이 큰 목록을 빠르게 만드는 방법이 있나요?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />이 프로파일러 도구가 유용할 것입니다.공유해 주셔서 감사합니다.
당신 말이 맞는 것 같습니다. 더 빠르게 실행되지 않는 이유는 코드에 더 큰 병목 현상이 있기 때문입니다."::" 행렬 코드는 직관적인 for 루프보다 빠르게 실행되는 것 같습니다.10+11행의 %와 31행의 %를 비교하면 알 수 있습니다.
내 현재 코드는 대규모 데이터 세트를 비교하지 않지만 더 많은 양의 데이터에 대해 유사한 스크립트를 작성하고 for 루프를 제거하는 것이 코드를 더 빠르게 만드는 일반적인 확실한 방법이라고 예상하기 때문에 여전히 궁금했습니다.
Re: for 루프 없이 큰 목록을 빠르게 만드는 방법이 있나요?좋은 성능 테스트.
JSL에는 성능 질문에 답하는 데 도움이 되는 프로파일러가 있습니다.

나는 이것을 얻기 위해 그것을 실행했습니다 :

이는 연관 배열에 값을 설정하는 것이 이 코드에서 병목 현상을 일으킨다는 것을 알려줍니다.(라인 10 대 라인 11.) (라인 23에는 아마도 처음으로 로그를 여는 것이 포함되어 있을 것입니다. 이를 무시하십시오. 42가 더 대표적입니다.)
Big 클래스에는 행이 40개만 있습니다.더 많은 행(10K?)이 있으면 다른 병목 현상이 나타날 수 있습니다.temparray<
열의 각 고유 값에 대해 작은 연속 정수의 조회 테이블을 생성하려는 것 같습니다.이를 수행하는 영리한 방법이 있을 수 있지만 지금은 해당 방법이 없습니다.어쩌면 다른 사람이...어쩌면 데이터베이스 조인 작업을 하게 될까요?
Re: for 루프 없이 큰 목록을 빠르게 만드는 방법이 있나요?감사합니다. 도움이 되었습니다.나는 이것이 내 코드 속도를 높이기를 바랐지만 for 루프의 속도가 비슷한 것 같아서 놀랐습니다.어떤 제안이 있으십니까?
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
t1 = tick seconds();
numberarray = Function({list},
temparray = Associative Array(list);
tempnum = nitems(temparray << Get Keys);
tempitems = temparray << Get Keys;
templist = {};
For(l=1, l<=tempnum, l++, insertinto(templist, l));
temparray = Associative Array(tempitems, templist);
//return(temparray)
);
for(i=1, i<=100,i++,
array = numberarray( Column(dt, 1) );
array2 = numberarray( Column(dt, 2) );
array3 = numberarray( Column(dt, 3) );
array4 = numberarray( Column(dt, 4) );
array5 = numberarray( Column(dt, 5) ););
t2 = tick seconds();
Print( Concat( Char( t2 - t1 ), " seconds." ) );
t1 = tick seconds();
numberarray = Function({list},
temparray = Associative Array(list);
tempnum = nitems(temparray << Get Keys);
tempitems = temparray << Get Keys;
temparray = Associative Array(tempitems, 1::tempnum);
);
for(i=1, i<=100,i++,
array = numberarray( Column(dt, 1) );
array2 = numberarray( Column(dt, 2) );
array3 = numberarray( Column(dt, 3) );
array4 = numberarray( Column(dt, 4) );
array5 = numberarray( Column(dt, 5) ););
t2 = tick seconds();
Print( Concat( Char( t2 - t1 ), " seconds." ) );
Re: for 루프 없이 큰 목록을 빠르게 만드는 방법이 있나요?
a=3;
b=9;
AsList(a::b)[1]
결과:
{3, 4, 5, 6, 7, 8, 9}
여기서는 여러 가지 일이 진행됩니다. a::b는 한 행의 행렬을 만듭니다. [3 4 5 6 7 8 9]
AsList( ... )는 행렬을 목록 목록으로 변환합니다(실제로는 차원 중 하나가 1인 2차원이기 때문입니다.
[1]은 내부 목록을 추출합니다.
아마도 당신은 목록보다는 행렬을 원할 것입니다.빠른 코드에 관심이 있다면 가능하면 내장된 행렬 함수를 사용하세요.
이것은 다른 프로그래밍 언어의 마법 같은 반복자가 아닙니다. 그것 ~ 할 것이다 메모리에 전체 행렬과 목록을 생성하므로 아마도 수십억 개의 항목 목록을 만들고 싶지 않을 것입니다.