Main Content

난수로 구성된 배열 만들기

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

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

난수 함수

기본적인 난수 함수에는 rand, randi, randn, randperm 등의 4가지가 있습니다. rand 함수는 균등분포에서 추출한, 0과 1 사이의 부동소수점 숫자를 반환합니다. 예를 들어, 균등분포에서 추출된 부동소수점 실수를 포함하는 1000×1 열 벡터를 만듭니다.

rng("default")
r1 = rand(1000,1);
r1의 모든 값은 열린 구간 (0,1) 내에 있습니다. 이러한 값의 히스토그램은 거의 평평한 모양입니다. 이는 상당히 균등하게 숫자 표본값 추출을 한다는 것을 나타냅니다.

randi 함수는 이산 균등분포에서 추출한 double형 정수 값을 반환합니다. 예를 들어, 이산 균등분포에서 추출된 정수 값을 포함하는 1000×1 열 벡터를 만듭니다.

r2 = randi(10,1000,1);
r2의 모든 값은 닫힌 구간 [1, 10] 내에 있습니다. 이러한 값의 히스토그램은 거의 평평한 모양입니다. 이는 상당히 균등하게 1과 10 사이의 정수 표본을 추출한다는 것을 나타냅니다.

randn 함수는 표준 정규분포에서 추출한 부동소수점 실수로 구성된 배열을 반환합니다. 예를 들어, 표준 정규분포에서 추출된 숫자를 포함하는 1000×1 열 벡터를 만듭니다.

r3 = randn(1000,1);
r3의 히스토그램은 대략 평균이 0이고 표준편차가 1인 정규분포의 모습을 띱니다.

randperm 함수를 사용하여 반복된 값이 없는 임의 정수 값으로 구성된 double형 배열을 만들 수 있습니다. 예를 들어, 범위 [1, 15]에서 임의로 선택된 정수를 포함하는 1×5 배열을 만듭니다.

r4 = randperm(15,5);
반복된 값을 포함하는 배열을 반환할 수 있는 randi와 달리, randperm에서 반환되는 배열에는 반복된 값이 없습니다.

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

난수 생성기

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

생성기 이름생성기 키워드
"twister"메르센 트위스터(Mersenne Twister)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")는 시드값을 0으로 설정하고 생성기 알고리즘을 메르센 트위스터(Mersenne Twister)로 설정합니다. MATLAB을 다시 시작할 때 난수 배열이 되풀이되지 않도록 하려면 시작 후 난수가 반복되는 이유 항목을 참조하십시오.

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

MATLAB 기본 설정에서 디폴트 알고리즘과 시드값을 설정할 수 있습니다 (R2023b 이후). 이 기본 설정을 변경하지 않으면 rng는 이전 릴리스에서처럼 공장 출하값 "twister"(시드값이 0인 메르센 트위스터 생성기)를 사용합니다. 자세한 내용은 난수 생성기의 디폴트 설정난수 생성기의 재현성 항목을 참조하십시오.

난수 데이터형

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'

참고 항목

| | | |

관련 항목