Main Content

난수로 구성된 배열 만들기

MATLAB®의사독립적의사 난수를 생성하는 알고리즘을 사용합니다. 이러한 숫자는 엄격하게 수학적 관점에서는 임의적이고 독립적이지 않지만 다양한 통계적 임의성 검정 및 독립성 검정을 통과하며, 검정 또는 진단 목적으로 난수 계산을 반복할 수도 있습니다.

rand,randi,randn,randperm함수는 난수로 구성된 배열을 만드는 주요 함수입니다.rng함수를 사용하면 난수를 생성하는 시드값과 알고리즘을 제어할 수 있습니다.

난수 함수

기본적인 난수 함수에는rand,randi,randn,randperm등의 4가지가 있습니다.rand함수는 균등분포에서 추출한, 0과 1 사이의 부동소수점 숫자를 반환합니다. 예를 들면 다음과 같습니다.

rng('default') r1 = rand(1000,1);
r1은 균등분포에서 추출된 부동소수점 실수를 포함하는 1000×1 열 벡터입니다.r1의모든값은열린구간(0,1) 내에 있습니다. 이러한 값의 히스토그램은 거의 평평한 모양입니다. 이는 상당히 균등하게 숫자 표본값 추출을 한다는 것을 나타냅니다.

randi함수는 이산 균등분포에서 추출한double형 정수 값을 반환합니다. 예를 들면 다음과 같습니다.

r2= randi(10,1000,1);
r2는 범위가 닫힌 구간 [1, 10]인 이산 균등분포에서 추출된 정수 값을 포함하는 1000×1 열 벡터입니다. 이러한 값의 히스토그램은 거의 평평한 모양입니다. 이는 상당히 균등하게 1과 10 사이의 정수 표본을 추출한다는 것을 나타냅니다.

randn함수는 표준 정규분포에서 추출한 부동소수점 실수로 구성된 배열을 반환합니다. 예를 들어, 다음과 같이 합니다.

r3= randn(1000,1);
r3은 표준 정규분포에서 추출된 숫자를 포함하는 1000×1 열 벡터입니다.r3의 히스토그램은 대략 평균이 0이고 표준편차가 1인 정규분포의 모습을 띱니다.

randperm함수를 사용하여 반복된 값이 없는 임의 정수 값으로 구성된double형 배열을 만들 수 있습니다. 예를 들면 다음과 같습니다.

r4 = randperm(15,5);
r4는 범위 [1, 15]에서 임의로 선택된 정수를 포함하는 1×5 배열입니다. 반복된 값을 포함하는 배열을 반환할 수 있는randi와 달리,randperm에서 반환되는 배열에는 반복된 값이 없습니다.

이러한 함수에 대한 연속된 호출은 각각 다른 결과를 반환합니다. 이 동작은 서로 다른 난수 값으로 구성된 여러 배열을 만들 때 유용합니다.

난수 생성기

MATLAB은 표에 요약되어 있는 것처럼 여러 생성기 알고리즘 옵션을 제공합니다.

생성기 이름 생성기 키워드
'twister' 메르센 트위스터(Mersenne Twister)(MATLAB 시작 시 디폴트 스트림에서 사용) mt19937ar
'simdTwister' SIMD 기반 고속 메르센 트위스터(SIMD-Oriented Fast Mersenne Twister) dsfmt19937
'combRecursive' 결합 다중 재귀적(Combined Multiple Recursive) mrg32k3a
'multFibonacci' 시차 피보나치 수열(Multiplicative Lagged Fibonacci) mlfg6331_64
'philox' 10회 라운드의 Philox 4x32 생성기 philox4x32_10
'threefry' 20회 라운드의 Threefry 4x64 생성기 threefry4x64_20
'v4' 레거시 MATLAB 버전 4.0 생성기 mcg16807
'v5uniform' 레거시 MATLAB 버전 5.0 균일 생성기 swb2712
'v5normal' 레거시 MATLAB 버전 5.0 일반 생성기 shr3cong

rand,randi,randn,randperm함수에서 사용되는 시드값과 생성기를 설정하려면rng함수를 사용하십시오. 예를 들어,rng(0,'twister')는 생성기를 디폴트 상태로 재설정합니다. MATLAB을 다시 시작할 때 난수 배열이 되풀이되지 않도록 하려면시작 후 난수가 반복되는 이유항목을 참조하십시오.

동일한 난수를 사용하여 계산을 반복하거나 반복된 계산에 다른 난수가 사용되도록 난수 생성기의 상태를 제어하는 방법에 대한 자세한 내용은난수 생성 제어항목을 참조하십시오.

난수 데이터형

randrandn함수는기본적으로배정밀도값을생성합니다。

rng('default') A = rand(1,5); class(A)
ans = 'double'

클래스를 배정밀도로 명시적으로 지정하려면 다음을 사용하십시오.

rng('default') B = rand(1,5,'double'); class(B)
ans = 'double'
isequal(A,B)
ans = 1

randrandn은 단정밀도 값도 생성할 수 있습니다.

rng('default') A = rand(1,5,'single'); class(A)
ans = 'single'

이전 예제의 배정밀도 값을 형변환한 것과 같은 값이 생성됩니다. 함수가 값을 추출하는 난수 스트림은 어떤 클래스의 값이 반환되는지에 관계없이 동일한 방법을 진행시킵니다.

A,B
A = 0.8147 0.9058 0.1270 0.9134 0.6324 B = 0.8147 0.9058 0.1270 0.9134 0.6324

randi는 정수형 및 단정밀도 또는 배정밀도를 모두 지원합니다.

A = randi([1 10],1,5,'double'); class(A)
ans = 'double'
B = randi([1 10],1,5,'uint8'); class(B)
ans = 'uint8'

참고 항목

||||

관련 항목