이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

권장되지 않는 rand 구문과 randn 구문 대체하기

권장되지 않는 구문에 대한 설명

이전 버전의 MATLAB®에서 사용자는 'seed', 'state' 또는 'twister' 입력값을 통해 rand 함수와 randn 함수가 사용하는 난수 생성기를 제어했습니다. 예를 들면 다음과 같습니다.

rand('seed',sd)
randn('seed',sd)
rand('state',s)
randn('state',s)
rand('twister',5489)

이 구문들은 서로 다른 유형의 생성기를 참조하지만, 다음과 같은 이유로 이러한 구문은 더 이상 권장되지 않습니다.

  • 'seed''state'라는 용어는 생성기와 관련하여 오해의 소지가 있는 이름입니다.

  • 'twister'를 제외한 모든 생성기에 결함이 있습니다.

  • 이 구문들은 randrandn에 대해 불필요하게 각기 다른 생성기를 사용합니다.

기존 코드에서 권장되지 않는 구문을 다른 구문으로 바꿀 경우 미치는 영향을 알아보려면 MATLAB 세션 시작 시 다음 명령을 실행하십시오.

warning('on','MATLAB:RandStream:ActivatingLegacyGenerators')
warning('on','MATLAB:RandStream:ReadingInactiveLegacyGeneratorState') 

대체 구문에 대한 설명

rng 함수를 사용하여 rand, randn, randirandperm, sprand 등의 기타 모든 난수 생성 함수에서 사용되는 공유 생성기를 제어할 수 있습니다. 권장되지 않는 구문을 다른 구문으로 바꿀 때 rng 함수를 사용하는 방법을 익히려면 먼저 여기에서 각 구문의 함수 용법을 살펴보십시오. 그러면 사용자의 요구 사항에 가장 적합한 새 rng 구문을 확인하는 데 도움이 됩니다.

rand(Generator,s) 또는 randn(Generator,s)의 첫 번째 입력값은 아래 설명된 대로 생성기의 유형을 지정했습니다.

Generator = 'seed'는 시드 초기화 값이 아니라 MATLAB v4 생성기를 나타냈습니다.

Generator = 'state'는 생성기의 내부 상태가 아니라 MATLAB v5 생성기를 나타냈습니다.

Generator = 'twister'는 메르센 트위스터 생성기를 나타냈지만, 이제는 MATLAB 시작 생성기를 나타냅니다.

이전 버전의 MATLAB에서 생성된 난수를 정확히 다시 생성하려는 경우를 제외하고 v4 생성기와 v5 생성기는 더 이상 권장되지 않습니다. 코드를 업데이트하는 가장 간단한 방법은 rng를 사용하는 것입니다. rng 함수는 randrandn 생성기의 이름을 다음과 같이 대체합니다.

rand/randn 생성기 이름rng 생성기 이름
'seed''v4'
'state'

'v5uniform'(rand의 경우)
                  또는
'v5normal'(randn의 경우)

'twister''twister'(권장)

정수 시드값을 사용하여 생성기를 초기화할 경우의 대체 구문

rand(Generator,sd) 구문에서 정수 시드값 sd를 사용하는 가장 일반적인 경우는 다음과 같았습니다.

  • 매번 정확히 동일한 난수를 다시 생성하려는 경우(예: 0, 1, 3141879 등의 시드값 사용)

  • MATLAB이 항상 개별 실행에서 각기 다른 난수를 제공하도록 하려는 경우(예: sum(100*clock)과 같은 시드값 사용)

다음 표에서는 정수 시드값 sd를 사용하는 구문의 대체 구문을 보여줍니다.

  • 첫 번째 열에는 권장되지 않는 randrandn 구문이 나와 있습니다.

  • 두 번째 열에서는 권장되지 않는 동작을 새 rng 함수를 사용하여 정확히 다시 만드는 방법을 보여줍니다. 대부분의 경우, 이러한 작업은 더 이상 권장되지 않는 v4 생성기 또는 v5 생성기와 같은 레거시 생성기 유형을 지정하여 수행합니다.

  • 세 번째 열에서는 rng에 대한 생성기 유형 입력값(선택 사항)을 지정하지 않는, 권장 대체 구문을 보여줍니다. 따라서, 항상 Generator 입력값을 생략하는 경우, rand, randn, randi는 MATLAB 시작 시 사용되는 디폴트 메르센 트위스터 생성기만 사용하십시오. 향후 릴리스에서 새 생성기가 메르센 트위스터를 대체하는 경우 이 코드는 새 디폴트 값을 사용하게 됩니다.

권장되지 않는 rand/randn 구문권장되지 않음: 생성기 유형을 지정하여 권장되지 않는 동작을 정확히 재생권장 대체 구문: 생성기 유형을 재정의하지 않음
rand('twister',5489)rng(5489,'twister')rng('default')
rand('seed',sd)rng(sd,'v4')rng(sd)
randn('seed',sd)
rand('state',sd)rng(sd,'v5uniform')
randn('state',sd)rng(sd,'v5normal')
rand('seed',sum(100*clock))rng(sum(100*clock),'v4')rng('shuffle')

상태 벡터를 사용하여 생성기를 초기화할 경우의 대체 구문

rand(Generator,st) 구문에서 상태 벡터(여기서 st로 표시됨)의 가장 일반적인 용도는 알고리즘이나 반복의 특정 지점에서 생성된 난수를 정확히 재현하는 것이었습니다. 예를 들어, 디버그 시 도움이 되도록 이 벡터를 사용할 수 있습니다.

rng 함수는 다음 표에 나와 있는 것처럼 난수 생성기의 상태를 저장하고 복원하는 패턴을 바꿉니다. 왼쪽 열의 예제에서는 사용자가 v5 균일 생성기를 사용하는 것으로 가정합니다. 오른쪽 열의 예제에서는 새로운 구문을 사용하며, 사용하는 모든 생성기에 적용할 수 있습니다.

rand/randn을 사용한, 권장되지 않는 구문rng를 사용하는 새 구문
% Save v5 generator state.
st = rand('state');

% Call rand.
x = rand;

% Restore v5 generator state.
rand('state',st);

% Call rand again and hope 
% for the same results.
y = rand
% Get generator settings.
s = rng;

% Call rand.
x = rand;

% Restore previous generator 
% settings.
rng(s);

% Call rand again and 
% get the same results.
y = rand

데모를 보려면 이 교육용 비디오를 참조하십시오.

권장되지 않는 구문을 업그레이드할 수 없는 경우

권장되지 않는 난수 생성기 제어 구문을 사용하는 코드가 있지만 이 코드를 사용자가 수정할 수 없거나 수정하는 것이 허용되지 않을 경우, 이 코드를 사용하면 MATLAB이 레거시 모드로 전환된다는 것을 반드시 기억해 두십시오. 레거시 모드에서, randrandn은 각각 고유한 설정을 갖는 개별 생성자로 제어됩니다.

레거시 모드에서 rand에 대한 호출은 다음 중 하나를 사용합니다.

  • 'v4' 생성기(rand('seed', ...)로 제어됨)

  • 'v5uniform' 생성기(rand('state', ...)로 제어됨)

  • 'twister' 생성기(rand('twister', ...)로 제어됨)

레거시 모드에서 randn에 대한 호출은 다음 중 하나를 사용합니다.

  • 'v4' 생성기(randn('seed', ...)로 제어됨)

  • 'v5normal' 생성기(randn('state', ...)로 제어됨)

사용하는 코드가 MATLAB을 레거시 모드로 전환하는 경우 다음 명령을 사용하여 레거시 모드에서 빠져나와 디폴트 시작 생성기로 돌아갈 수 있습니다.

rng default

또는, MATLAB을 레거시 모드로 전환하는 코드가 이를 수행하지 못하도록 방지하려면 다음을 사용하십시오.

s = rng     % Save current settings of the generator.
  ...       % Call code using legacy random number generator syntaxes.
rng(s)      % Restore previous settings of the generator.