숫자 목록을 문자 목록으로 변환하는 방법은 무엇입니까?안녕하세요 여러분,
숫자가 포함된 목록이 있고 문자로 변환하고 싶습니다. 루프를 사용하지 않고 그렇게 할 수 있는 방법이 있습니까? 적절한 기능을 찾을 수 없었습니다.
당신의 도움을 주셔서 감사합니다!
데이터 혼합 및 정리Re: 숫자 목록을 문자 목록으로 변환하는 방법은 무엇입니까?@DonMcCormack 바닐라 for-loop는 문제의 크기에 따라 가장 빠르고 가장 느립니다. 나는 정말 놀란 @ms 단어 기반 솔루션은 큰 크기에서 매우 잘 수행됩니다. 그런 JMP의 기능을 보여주는 예상치 못한 답변이 정말 마음에 듭니다. 어떤 크기에서는 for-each가 for보다 빠릅니다. 나도 그것을 아는 것을 좋아합니다.
나는 아무것도 피하려고 하지 않을 것입니다. 나는 확실한 승자보다는 토론에 대한 당신의 현재 계획을 좋아합니다. 다음은 몇 가지 토론 시작 아이디어입니다.
- 변환할 목록이 N개이고 모두 M개의 요소가 있는 경우 N과 M이 작성하는 코드에 어떤 영향을 줍니까? 속도뿐만 아니라 정확성과 유지 관리 용이성을 고려하십시오.
- 메모리 제약이 있는 기계에 가장 적합한 아이디어는 무엇입니까?
- "." 대신 "NaN"을 어떻게 표시하시겠습니까?
- 범용 루틴은 어떤 모습일까요? JMP에 내장되어 있다면 무엇이라고 부르겠습니까?
Re: 숫자 목록을 문자 목록으로 변환하는 방법은 무엇입니까?여기에서 For Each보다 약간 더 빠른 것으로 보이는 Transform Each도 있습니다.
theList = Transform Each( {value}, theList, Char( value ) );
Re: 숫자 목록을 문자 목록으로 변환하는 방법은 무엇입니까?감사해요 @Craige_Hales ! 좋아요. 다음 챌린지에 적용할 수 있는지 확인하겠습니다. 반복을 피해야 할까요 아니면 그냥 을 위한 (및 그 파생물)?반복을 피하는 한 가지 방법은 표현식 평가를 이용하는 것입니다. 이 방법에 익숙하지 않은 경우 다음을 확인하십시오. @joseph_morgan '에스 디스커버리 튜토리얼, 포인트 1 . 위 문제의 경우 함수는 다음과 같습니다.
convertNumberToCharacter = Function({inList},{i=1,outList={}},
outList[1::N Items(inList)] = Expr(Char(inList[i++]));
Eval List(outList);
);
/* You can check it out using the code below.
tStart = HP Time();
alist = As List(J(10000,1,Random Normal(1e6,1e5)));
newList = convertNumberToCharacter(alist);
Print((HP Time()-tStart)/1e6);
*/
몇 가지 챌린지에서 이것을 시도해 보았고 간결하지만 더 오래 걸리는 경향이 있고 이해하기 더 어렵습니다(표현 처리에 상당히 익숙하지 않은 경우).
Re: 숫자 목록을 문자 목록으로 변환하는 방법은 무엇입니까?@DonMcCormack - 도전 !
Re: 숫자 목록을 문자 목록으로 변환하는 방법은 무엇입니까?와우 하나의 솔루션을 찾고 있었는데 너무 많이 얻었습니다! JMP는 놀랍습니다! 여러분 모두 감사합니다!
Re: 숫자 목록을 문자 목록으로 변환하는 방법은 무엇입니까?다양한 기능의 크기에 따른 성능을 잘 보여줍니다. 아직 JMP 15를 사용하고 있는데 사용할 수 없습니다. 각각() 그러나 Jeff의 타이밍 연습을 더 확장하기 위해 동일한 결과를 제공하는 두 개의 함수를 더 추가합니다.
Repeat(k = 0; {k++; Char( theList[k] )}, listsize);
Words( Substr( Char( theList ), 2, Length( Char( thelist ) ) - 2 ), ", " );

작은 목록에 대해 가장 빠른 For 루프는 크기 > 50의 Words, 크기 > 1000의 data-table-detour 함수, 크기 > 30000의 Repeat을 능가합니다.
수백만 개의 "단어"에서 약 두 배 빠른 크기>50에서 Words가 가장 빠른 상태를 유지하는 것을 보고 약간 놀랐습니다.
Re: 숫자 목록을 문자 목록으로 변환하는 방법은 무엇입니까?추가 정보 감사합니다 @제프_퍼킨슨 그리고 @Craige_Hales !
커뮤니티와 함께 항상 많은 것을 배웁니다!!
Re: 숫자 목록을 문자 목록으로 변환하는 방법은 무엇입니까?Jeff의 답변 확장
Different overheads hurt for small sizes and help for large sizes.Different overheads hurt for small sizes and help for large sizes.다른 오버헤드는 작은 크기에 피해를 주고 큰 크기에 도움이 됩니다.
dt = New Table( "Untitled 3",
Add Rows( 0 ),
New Column( "size", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [] ) ),
New Column( "for", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [] ) ),
New Column( "foreach", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [] ) ),
New Column( "custom", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [] ) )
);
NumListToChar = Function( {myList},
{defaultlocal},
dtx = New Table( "x", New Column( "y", values( myList ) ), private );
dtx:y << data type( character );
myList = dtx:y << get values;
Close( dtx, nosave );
Return( myList );
);
For( listsize = 1, listsize < 1e7, listsize *= 2,
theList = As List( J( listsize, 1, Random Integer( 100 ) ) );
start = HP Time();
For Each( {value, index}, theList, theList[index] = Char( value ) );
foreachloop = HP Time() - start;
theList = As List( J( listsize, 1, Random Integer( 100 ) ) );
start = HP Time();
theList = NumListToChar( theList );
customfunction = HP Time() - start;
theList = As List( J( listsize, 1, Random Integer( 100 ) ) );
start = HP Time();
For( i = 1, i <= N Items( theList ), i++,
theList[i] = Char( theList[i] )
);
forloop = HP Time() - start;
Show( foreachloop, customfunction, forloop );
dt << addrows( 1 );
dt:size[N Rows( dt )] = listsize;
dt:for[N Rows( dt )] = forloop / 1e6;
dt:foreach[N Rows( dt )] = foreachloop / 1e6;
dt:custom[N Rows( dt )] = customfunction / 1e6;
Wait( 0.1 ); // so it shows on display
);Re: 숫자 목록을 문자 목록으로 변환하는 방법은 무엇입니까?다음은 for 루프, for each 및 데이터 테이블을 사용하는 사용자 지정 함수의 세 가지 방법에 대한 빠른 타이밍 프로그램입니다.
Names Default To Here( 1 );
listsize=1000000;
theList = As List( J( listsize, 1, Random Integer( 100 ) ) );
NumListToChar = Function( {myList},
{defaultlocal},
dtx = New Table( "x", New Column( "y", values( myList ) ), private );
dtx:y << data type( character );
myList = dtx:y << get values;
Close( dtx, nosave );
Return( myList );
);
start = HP Time();
For Each( {value, index}, theList, theList[index] = Char( value ) );
foreachloop = HP Time() - start;
theList = As List( J( listsize, 1, Random Integer( 100 ) ) );
start = HP Time();
theList = NumListToChar( theList );
customfunction = HP Time() - start;
theList = As List( J( listsize, 1, Random Integer( 100 ) ) );
start = HP Time();
For( i = 1, i <= N Items( theList ), i++,
theList[i] = Char( theList[i] )
);
forloop = HP Time() - start;
show(foreachloop, customfunction, forloop);
위에 표시된 listsize를 사용하는 경우 결과는 세 가지 방법 간에 매우 유사합니다.
foreachloop = 1106974;
customfunction = 1077862;
forloop = 1400643;
Re: 숫자 목록을 문자 목록으로 변환하는 방법은 무엇입니까?감사해요 @제프_퍼킨슨 !
궁금해서 시뮬레이션을 해봤는데 각 솔루션의 실행시간이 평균적으로 가장 빠른 것 같습니다!
그래서 저는 그 기능을 선택할 것입니다. @txnelson 또한 매우 잘 작동합니다.
두 분 모두 감사합니다 
Re: 숫자 목록을 문자 목록으로 변환하는 방법은 무엇입니까?JMP 16의 새로운 기능은 Each() 함수에 대해 컨테이너(목록, 행렬 또는 연관 배열)를 반복하여 각 요소에 대한 작업을 수행합니다.
다음은 숫자 목록을 문자열 목록으로 변환하는 데 사용하는 방법을 보여주는 예입니다.
Names Default To Here( 1 );
theList = {7, 8, 9};
For Each( {value, index}, theList, theList[index] = Char( value ) );
Re: 숫자 목록을 문자 목록으로 변환하는 방법은 무엇입니까?답장을 보내 주셔서 감사합니다. @txnelson 그것은 참으로 내가 찾던 것입니다.
루프와 테이블 생성을 포함하는 함수 사이에 무엇이 더 빠른지 궁금합니다. 어떤 생각?
Re: 숫자 목록을 문자 목록으로 변환하는 방법은 무엇입니까?다음은 원하는 기능을 수행하는 작은 스크립트입니다.코드에서 함수를 정의하고 사용하거나 오픈 코드에서 4개의 명령문을 사용하여 변환을 수행할 수 있습니다.
Names Default To Here( 1 );
theList = {7,8,9};
NumListToChar = Function( {myList},
{defaultlocal},
dtx = New Table( "x", New Column( "y", values( myList ) ), private );
dtx:y << data type( character );
myList = dtx:y << get values;
Close( dtx, nosave );
Return( myList );
);
theList = NumListToChar( theList );