Main Content

randn

정규분포된 난수

설명

X = randn은 표준 정규분포에서 추출한 난수 스칼라를 반환합니다.

예제

X = randn(n)은 정규분포된 난수로 구성된 n×n 행렬을 반환합니다.

예제

X = randn(sz1,...,szN)은 난수로 구성된 sz1×...×szN 배열을 반환합니다. 여기서 sz1,...,szN은 각 차원의 크기를 나타냅니다. 예를 들어, randn(3,4)는 3×4 행렬을 반환합니다.

예제

X = randn(sz)는 난수로 구성된 배열을 반환합니다. 여기서 크기 벡터 szsize(X)를 정의합니다. 예를 들어, randn([3 4])는 3×4 행렬을 반환합니다.

예제

X = randn(___,typename)은 데이터형이 typename인 난수로 구성된 배열을 반환합니다. typename 입력값은 "single" 또는 "double"이 될 수 있습니다. 위에 열거된 구문의 모든 입력 인수와 사용할 수 있습니다.

예제

X = randn(___,"like",p)p와 유사한, 즉 데이터형, 실수/복소수 여부가 p와 동일한 난수로 구성된 배열을 반환합니다. typename이나 "like" 중 하나를 지정할 수 있으나, 둘 다 지정할 수는 없습니다.

X = randn(s,___)는 디폴트 전역 스트림 대신 난수 스트림 s에서 숫자를 생성합니다. 스트림을 만들려면 RandStream 함수를 사용하십시오. s를 지정하고 뒤이어 위에 열거된 구문에 나와 있는 입력 인수 조합을 지정할 수 있습니다.

예제

모두 축소

정규분포된 난수로 구성된 5×5 행렬을 생성합니다.

r = randn(5)
r = 5×5

    0.5377   -1.3077   -1.3499   -0.2050    0.6715
    1.8339   -0.4336    3.0349   -0.1241   -1.2075
   -2.2588    0.3426    0.7254    1.4897    0.7172
    0.8622    3.5784   -0.0631    1.4090    1.6302
    0.3188    2.7694    0.7147    1.4172    0.4889

지정된 평균 벡터와 공분산 행렬을 사용하여 이변량 정규분포의 값을 생성합니다.

mu = [1 2];
sigma = [1 0.5; 0.5 2];
R = chol(sigma);
z = repmat(mu,10,1) + randn(10,2)*R
z = 10×2

    1.5377    0.4831
    2.8339    6.9318
   -1.2588    1.8302
    1.8622    2.3477
    1.3188    3.1049
   -0.3077    1.0750
    0.5664    1.6190
    1.3426    4.1420
    4.5784    5.6532
    3.7694    5.2595

난수 생성기의 현재 상태를 저장하고 난수로 구성된 1×5 벡터를 생성합니다.

s = rng;
r = randn(1,5)
r = 1×5

    0.5377    1.8339   -2.2588    0.8622    0.3188

난수 생성기의 상태를 s로 복원한 다음, 난수로 구성된 1×5 벡터를 새로 생성합니다. 값은 이전과 동일합니다.

rng(s);
r1 = randn(1,5)
r1 = 1×5

    0.5377    1.8339   -2.2588    0.8622    0.3188

난수로 구성된 3×2×3 배열을 만듭니다.

X = randn([3,2,3])
X = 
X(:,:,1) =

    0.5377    0.8622
    1.8339    0.3188
   -2.2588   -1.3077


X(:,:,2) =

   -0.4336    2.7694
    0.3426   -1.3499
    3.5784    3.0349


X(:,:,3) =

    0.7254   -0.2050
   -0.0631   -0.1241
    0.7147    1.4897

단정밀도 요소를 갖는 난수로 구성된 1×4 벡터를 만듭니다.

r = randn(1,4,"single")
r = 1x4 single row vector

    0.5377    1.8339   -2.2588    0.8622

class(r)
ans = 
'single'

기존 배열과 동일한 크기의, 정규분포된 난수로 구성된 행렬을 만듭니다.

A = [3 2; -2 1];
sz = size(A);
X = randn(sz)
X = 2×2

    0.5377   -2.2588
    1.8339    0.8622

앞의 두 줄의 코드는 다음과 같이 한 줄로 표현하는 것이 보통입니다.

X = randn(size(A));

단정밀도 난수로 구성된 2×2 행렬을 만듭니다.

p = single([3 2; -2 1]);

p와 크기, 데이터형이 동일한, 난수로 구성된 배열을 만듭니다.

X = randn(size(p),"like",p)
X = 2x2 single matrix

    0.5377   -2.2588
    1.8339    0.8622

class(X)
ans = 
'single'

R2022a 이후

표준 복소수 정규분포에서 복소수형 난수 10개를 생성합니다.

a = randn(10,1,"like",1i)
a = 10×1 complex

   0.3802 + 1.2968i
  -1.5972 + 0.6096i
   0.2254 - 0.9247i
  -0.3066 + 0.2423i
   2.5303 + 1.9583i
  -0.9545 + 2.1460i
   0.5129 - 0.0446i
   0.5054 - 0.1449i
  -0.0878 + 1.0534i
   0.9963 + 1.0021i

R2022a 이후

기본적으로 randn(__,"like",1i)는 표준 복소수 정규분포에서 난수를 생성합니다. 실수부와 허수부는 평균이 0이고 공분산이 1/2인, 독립적으로 정규분포된 확률 변수입니다. 2차원 확률 변수 z=[Re(z),Im(z)]의 공분산 행렬은 [1/2 0; 0 1/2]입니다. 이 디폴트 동작을 표시하기 위해 randn을 사용하여 50,000개의 난수를 생성하고 공분산을 계산합니다.

n = 50000;
z = randn(n,1,"like",1i);
cov_z = cov(real(z),imag(z),1)
cov_z = 2×2

    0.4980    0.0007
    0.0007    0.4957

특정 평균과 공분산을 가지는 보다 일반적인 복소수 정규분포에서 난수를 생성하기 위해 디폴트 분포에서 생성된 데이터를 변환합니다. 평균이 0이고 단위 공분산 행렬을 가지는 정규분포를 따르는 N차원 확률 변수 z=[z1,z2,,zN]의 경우 zy=μ+zR로 변환할 수 있습니다. 변수 y는 평균 μ와 양의 정부호 대칭 행렬인 공분산 행렬 σ=RTR을 가지는 정규분포를 따릅니다. 예를 들면 평균을 μ=1+2i, 공분산 행렬을 σ=[σxxσxyσyxσyy]=[2-2-24]로 지정합니다.

mu = 1 + 2i;
sigma = [2 -2; -2 4];

공분산 행렬에 대한 촐레스키 분해(Cholesky Decomposition)를 수행합니다. 결과는 sigma = R'*R을 충족하는 상부 삼각 행렬 R입니다. 원래 분포에서 실수부와 허수부의 분산이 1/2이므로 sqrt(2) 인자도 적용하여 원래 데이터를 스케일링합니다. 그런 다음 스케일링된 데이터를 지정된 평균으로 이동합니다.

R = chol(sigma);
z_scaled = sqrt(2)*[real(z) imag(z)]*R*[1; 1i];
y = mu + z_scaled;

처음 생성된 10개의 복소수를 표시합니다.

y(1:10)
ans = 10×1 complex

   1.7604 + 3.8331i
  -2.1945 + 6.4138i
   1.4508 - 0.3002i
   0.3868 + 3.0977i
   6.0606 + 0.8560i
  -0.9090 + 8.2011i
   2.0259 + 0.8850i
   2.0108 + 0.6993i
   0.8244 + 4.2823i
   2.9927 + 2.0115i

입력 인수

모두 축소

정사각 행렬의 크기로, 정수 값으로 지정됩니다.

  • n0이면 X는 빈 행렬이 됩니다.

  • n이 음수이면 0으로 처리됩니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

각 차원의 크기로, 정수 값으로 구성된 개별 인수로 지정됩니다.

  • 크기가 0인 차원이 있을 경우 X는 빈 배열이 됩니다.

  • 크기가 음수인 차원이 있을 경우 0으로 처리됩니다.

  • randn은 세 번째 차원부터는 크기가 1인 차원을 무시합니다. 예를 들어, randn(3,1,1,1)은 난수로 구성된 3×1 벡터를 생성합니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

각 차원의 크기로, 정수 값으로 구성된 행 벡터로 지정됩니다. 이 벡터의 요소는 각각 해당하는 차원의 크기를 나타냅니다.

  • 크기가 0인 차원이 있을 경우 X는 빈 배열이 됩니다.

  • 크기가 음수인 차원이 있을 경우 0으로 처리됩니다.

  • randn은 세 번째 차원부터는 크기가 1인 차원을 무시합니다. 예를 들어, randn([3 1 1 1])은 난수로 구성된 3×1 벡터를 생성합니다.

예: sz = [2 3 4]는 2×3×4 배열을 생성합니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

생성할 데이터형(클래스)으로, "double", "single", 또는 randn을 지원하는 다른 클래스의 이름으로 지정됩니다.

예: randn(5,"single")

생성할 배열의 프로토타입으로, 숫자형 배열로 지정됩니다.

예: randn(5,"like",p)

데이터형: single | double
복소수 지원 여부:

난수 스트림으로, RandStream 객체로 지정됩니다.

예: s = RandStream("dsfmt19937"); randn(s,[3 1])

세부 정보

모두 축소

표준 실수 및 표준 복소수 정규분포

실수형 난수를 생성할 때 randn 함수는 다음과 같이 표준 정규분포를 따르는 데이터를 생성합니다.

f(x)=12πex2/2.

여기서 x는 평균이 0이고 분산이 1인 실수형 난수 변수입니다.

명령 randn(...,"like",1i)를 사용하는 등 복소수형 난수를 생성할 때 randn 함수는 다음과 같이 표준 복소수 정규분포를 따르는 데이터를 생성합니다.

f(z)=1πe|z|2.

여기서 z는 실수부와 허수부가 평균이 0이고 분산이 1/2인 독립적으로 정규분포된 확률 변수인 복소수형 난수 변수입니다.

  • randn이 생성하는 수열은 rand, randi, randn의 기반이 되는 균일 의사 난수 생성기의 내부 설정에 의해 결정됩니다. rng를 사용하여 이 공유 난수 생성기를 제어할 수 있습니다.

확장 기능

버전 내역

R2006a 이전에 개발됨

모두 확장