숫자 목록을 문자 목록으로 변환하는 방법은 무엇입니까?안녕하세요 여러분,
숫자가 포함 된 목록이 있는데이를 문자로 변환하고 싶습니다. 루프를 사용하지 않고 할 수있는 방법이 있습니까? 적절한 기능을 찾을 수 없었습니다.
당신의 도움을 주셔서 감사합니다!
스크립팅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 );Re : 숫자 목록을 문자 목록으로 변환하는 방법은 무엇입니까?답변 해 주셔서 감사합니다 헉헉 실제로 내가 찾던 것입니다.
루프와 테이블 생성을 포함하는 함수 사이에서 무엇이 더 빠른지 궁금합니다. 어떤 생각?
Re : 숫자 목록을 문자 목록으로 변환하는 방법은 무엇입니까?JMP 16의 새로운 기능은 Each () 함수에 대해 컨테이너 (목록, 행렬 또는 연관 배열)를 반복하여 각 요소에 대해 작업을 수행합니다.
다음은 숫자 목록을 문자열 목록으로 변환하는 데 사용하는 방법을 보여주는 예입니다.
Names Default To Here( 1 );
theList = {7, 8, 9};
For Each( {value, index}, theList, theList[index] = Char( value ) );
Re : 숫자 목록을 문자 목록으로 변환하는 방법은 무엇입니까?감사 안녕하세요. !
각 솔루션의 실행 시간을 비교하기 위해 호기심만으로 몇 가지 시뮬레이션을 수행했으며 각 기능에 대한 평균이 가장 빠른 것 같습니다!
그래서 저는 그 기능을 선택하지만 헉헉 또한 매우 잘 작동합니다.
둘 다 감사합니다:)
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);
위에 표시된 목록 크기의 경우 결과는 세 가지 방법간에 매우 유사합니다.
foreachloop = 1106974;
customfunction = 1077862;
forloop = 1400643;
Re : 숫자 목록을 문자 목록으로 변환하는 방법은 무엇입니까?Jeff의 대답 확장
작은 크기의 경우 다른 오버 헤드가 아프고 큰 크기의 경우 도움이됩니다.
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 : 숫자 목록을 문자 목록으로 변환하는 방법은 무엇입니까?추가 정보에 감사드립니다 안녕하세요. 과 안녕하세요. !
우리는 항상 커뮤니티와 함께 많은 것을 배웁니다 !!
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의 반복보다 뛰어납니다.
나는 Words가 크기> 50에서 가장 빠르다는 것을보고 약간 놀랐습니다. 이는 수백만 개의 "단어"에서 약 두 배 빠른 속도입니다.
Re : 숫자 목록을 문자 목록으로 변환하는 방법은 무엇입니까?와우 한 가지 해결책을 찾고 있었는데 너무 많아요! JMP는 놀랍습니다! 여러분 모두 감사합니다!
Re : 숫자 목록을 문자 목록으로 변환하는 방법은 무엇입니까?안녕하세요. - 도전 !
Re : 숫자 목록을 문자 목록으로 변환하는 방법은 무엇입니까?감사 안녕하세요. ! 나는 그것을 좋아한다. 다음 챌린지에서 작업 할 수 있는지 살펴 보겠습니다. 반복을 피해야할까요 아니면 그냥 에 대한 (및 그 파생물)?반복을 피하는 한 가지 방법은 표현식 평가를 이용하는 것입니다. 이 접근 방식에 익숙하지 않은 경우 다음을 확인하십시오. 안녕하세요. '에스 발견 튜토리얼, 포인트 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 : 숫자 목록을 문자 목록으로 변환하는 방법은 무엇입니까?여기에 For Each보다 조금 더 빠른 것처럼 보이는 Transform Each도 있습니다.
theList = Transform Each( {value}, theList, Char( value ) );
Re : 숫자 목록을 문자 목록으로 변환하는 방법은 무엇입니까?안녕하세요. 바닐라 for-loop는 문제 크기에 따라 가장 빠르고 가장 느립니다. 나는 정말 놀란 @ms 단어 기반 솔루션은 큰 크기에서 매우 잘 수행됩니다. JMP의 기능을 보여주는 예상치 못한 답변이 정말 마음에 듭니다. 조금 놀랍습니다. for-each가 어떤 크기에서 for-for보다 빠릅니다. 저도 아는 것을 좋아합니다.
나는 아무것도 피하려고하지 않습니다. 나는 명확한 승자보다는 토론에 대한 현재 계획을 좋아합니다. 다음은 몇 가지 토론 시작 아이디어입니다.
- 변환 할 N 개의 목록이 있고 모두 M 개의 요소가있는 경우 N과 M이 작성하는 코드에 어떤 영향을 미칠까요? 속도뿐만 아니라 정확성과 유지 보수 용이성을 고려하십시오.
- 메모리가 제한된 컴퓨터에 가장 적합한 아이디어는 무엇입니까?
- "."대신 "NaN"을 어떻게 표시 하시겠습니까?
- 범용 루틴은 어떤 모습일까요? JMP에 내장 된 경우 무엇이라고 부르겠습니까?