난수로 구성된 배열 만들기
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인 메르센 트위스터 생성기)를 사용합니다. 자세한 내용은 난수 생성기의 디폴트 설정 및 난수 생성기의 재현성 항목을 참조하십시오.
난수 데이터형
rand
와 randn
함수는 기본적으로 배정밀도 값을 생성합니다.
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
rand
와 randn
은 단정밀도 값도 생성할 수 있습니다.
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'
참고 항목
rng
| rand
| randi
| randn
| randperm