이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
randn
정규분포된 난수
구문
설명
X = randn
은 표준 정규분포에서 추출한 난수 스칼라를 반환합니다.
X = randn(
은 난수로 구성된 sz1,...,szN
)sz1
×...×szN
배열을 반환합니다. 여기서 sz1,...,szN
은 각 차원의 크기를 나타냅니다. 예를 들어, randn(3,4)
는 3×4 행렬을 반환합니다.
X = randn(___,
은 데이터형이 typename
)typename
인 난수로 구성된 배열을 반환합니다. typename
입력값은 "single"
또는 "double"
이 될 수 있습니다. 위에 열거된 구문의 모든 입력 인수와 사용할 수 있습니다.
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차원 배열
난수로 구성된 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차원 확률 변수 의 공분산 행렬은 [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차원 확률 변수 의 경우 를 로 변환할 수 있습니다. 변수 는 평균 와 양의 정부호 대칭 행렬인 공분산 행렬 을 가지는 정규분포를 따릅니다. 예를 들면 평균을 , 공분산 행렬을 로 지정합니다.
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
입력 인수
n
— 정사각 행렬의 크기
정수 값
정사각 행렬의 크기로, 정수 값으로 지정됩니다.
n
이0
이면X
는 빈 행렬이 됩니다.n
이 음수이면0
으로 처리됩니다.
데이터형: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
sz1,...,szN
— 각 차원의 크기(개별 인수)
정수 값
각 차원의 크기로, 정수 값으로 구성된 개별 인수로 지정됩니다.
크기가
0
인 차원이 있을 경우X
는 빈 배열이 됩니다.크기가 음수인 차원이 있을 경우
0
으로 처리됩니다.randn
은 세 번째 차원부터는 크기가 1인 차원을 무시합니다. 예를 들어,randn(3,1,1,1)
은 난수로 구성된 3×1 벡터를 생성합니다.
데이터형: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
sz
— 각 차원의 크기(행 벡터)
정수 값
각 차원의 크기로, 정수 값으로 구성된 행 벡터로 지정됩니다. 이 벡터의 요소는 각각 해당하는 차원의 크기를 나타냅니다.
크기가
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
typename
— 생성할 데이터형(클래스)
"double"
(디폴트 값) | "single"
생성할 데이터형(클래스)으로, "double"
, "single"
, 또는 randn
을 지원하는 다른 클래스의 이름으로 지정됩니다.
예: randn(5,"single")
p
— 생성할 배열의 프로토타입
숫자형 배열
생성할 배열의 프로토타입으로, 숫자형 배열로 지정됩니다.
예: randn(5,"like",p)
데이터형: single
| double
복소수 지원 여부: 예
s
— 난수 스트림
RandStream
객체
난수 스트림으로, RandStream
객체로 지정됩니다.
예: s = RandStream("dsfmt19937"); randn(s,[3 1])
세부 정보
표준 실수 및 표준 복소수 정규분포
실수형 난수를 생성할 때 randn
함수는 다음과 같이 표준 정규분포를 따르는 데이터를 생성합니다.
여기서 x는 평균이 0이고 분산이 1인 실수형 난수 변수입니다.
명령 randn(...,"like",1i)
를 사용하는 등 복소수형 난수를 생성할 때 randn
함수는 다음과 같이 표준 복소수 정규분포를 따르는 데이터를 생성합니다.
여기서 z는 실수부와 허수부가 평균이 0이고 분산이 1/2인 독립적으로 정규분포된 확률 변수인 복소수형 난수 변수입니다.
팁
randn
이 생성하는 수열은rand
,randi
,randn
의 기반이 되는 균일 의사 난수 생성기의 내부 설정에 의해 결정됩니다.rng
를 사용하여 이 공유 난수 생성기를 제어할 수 있습니다.
확장 기능
C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.
사용법 관련 참고 및 제한 사항:
데이터형(클래스)은 MATLAB® 내장 숫자형이어야 합니다. 다른 클래스의 경우 정적
randn
메서드를 불러오지 않습니다. 예를 들어,randn(sz,'myclass')
는myclass.randn(sz)
를 불러오지 않습니다.크기 인수는 고정된 크기를 가져야 합니다.
Variable-Sizing Restrictions for Code Generation of Toolbox Functions (MATLAB Coder) 항목을 참조하십시오.
외재적(Extrinsic) 호출이 활성화되고
randn
이parfor
루프 내에서 호출되지 않은 경우, 생성된 MEX 파일은 직렬 코드에서 MATLAB과 동일한 난수 상태를 사용합니다. 그렇지 않을 경우, 생성된 MEX 코드와 독립 실행형 코드는 MATLAB과 동일한 상태로 초기화되는 자체의 난수 상태를 유지합니다.
스레드 기반 환경
MATLAB®의 backgroundPool
을 사용해 백그라운드에서 코드를 실행하거나 Parallel Computing Toolbox™의 ThreadPool
을 사용해 코드 실행 속도를 높일 수 있습니다.
이 함수는 스레드 기반 환경을 완전히 지원합니다. 자세한 내용은 스레드 기반 환경에서 MATLAB 함수 실행하기 항목을 참조하십시오.
GPU 배열
Parallel Computing Toolbox™를 사용해 GPU(그래픽스 처리 장치)에서 실행하여 코드 실행 속도를 높일 수 있습니다.
사용법 관련 참고 및 제한 사항:
GPU에서는 스트림 구문
randn(
가 지원되지 않습니다.s
,___)typename
을'gpuArray'
로 지정할 수 있습니다.typename
을'gpuArray'
로 지정하는 경우 배열의 디폴트 기본 유형은double
입니다.기본 유형
datatype
을 갖는 GPU 배열을 만들려면typename
앞에 추가 인수로 기본 유형을 지정하십시오. 예를 들어,X = randn(3,datatype,'gpuArray')
는 기본 유형이datatype
이고 난수로 구성된 3×3 GPU 배열을 만듭니다.기본 유형
datatype
은 다음 옵션 중 하나로 지정할 수 있습니다.'double'
'single'
숫자형 변수
p
를gpuArray
로 지정할 수도 있습니다.p
를gpuArray
로 지정하는 경우 반환되는 배열의 기본 유형은p
와 같습니다.
자세한 내용은 GPU에서 MATLAB 함수 실행하기 (Parallel Computing Toolbox) 항목을 참조하십시오.
분산 배열
Parallel Computing Toolbox™를 사용하여 대규모 배열을 클러스터의 결합된 메모리에 걸쳐 분할할 수 있습니다.
사용법 관련 참고 및 제한 사항:
codistributed
또는distributed
배열에 대해서는 스트림 구문randn(
가 지원되지 않습니다.s
,___)typename
을'codistributed'
또는'distributed'
로 지정할 수 있습니다.typename
을'codistributed'
또는'distributed'
로 지정하면 반환된 배열의 디폴트 기본 유형은double
입니다.기본 유형
datatype
을 갖는 분산 배열 또는 공동분산 배열을 만들려면typename
앞에 추가 인수로 기본 유형을 지정하십시오. 예를 들어,X = randn(3,datatype,'distributed')
는 기본 유형이datatype
이고 난수로 구성된 3×3 분산 행렬을 만듭니다.기본 유형
datatype
은 다음 옵션 중 하나로 지정할 수 있습니다.'double'
'single'
또한
p
를codistributed
또는distributed
배열로 지정할 수도 있습니다.p
를codistributed
또는distributed
배열로 지정하는 경우 반환되는 배열의 기본 유형은p
와 같습니다.추가적인
codistributed
구문을 보려면randn (codistributed)
(Parallel Computing Toolbox) 함수를 참조하십시오.
자세한 내용은 분산 배열을 사용하여 MATLAB 함수 실행 (Parallel Computing Toolbox) 항목을 참조하십시오.
버전 내역
R2006a 이전에 개발됨R2022a: "like"
로 실수/복소수 여부를 일치시키고 "like"
를 RandStream
객체와 함께 사용함
"like"
입력값은 실수 및 복소수 프로토타입 배열을 모두 지원합니다. 예를 들면 다음과 같습니다.
r = randn(2,2,"like",1i)
r = 0.3802 + 1.2968i 0.2254 - 0.9247i -1.5972 + 0.6096i -0.3066 + 0.2423i
모든 구문에서 이 기능을 지원합니다. 또한, 이제 "like"
를 RandStream
객체와 함께 randn
의 첫 번째 입력값으로 사용할 수 있습니다.
R2014a: 'like'
를 사용해서 기존 변수의 데이터형과 일치시킴
기존 변수와 동일한 데이터형으로 난수를 생성하려면 구문 randn(__,'like',p)
를 사용하십시오. 예를 들어, 다음과 같이 합니다.
A = single(pi); r = randn(4,4,'like',A); class(r)
ans = single
이 기능은 RandStream
객체를 randn
에 대한 첫 번째 입력값으로 전달하는 경우 사용할 수 없습니다.
R2013b: 정수가 아닌 크기 입력값은 지원되지 않음
정수가 아닌 차원을 지정하면 오류가 발생합니다. floor
를 사용하여 정수가 아닌 크기 입력값을 정수로 변환합니다.
R2008b: 'seed'
, 'state'
, 'twister'
입력값은 권장되지 않습니다.
rand
, randi
및 randn
의 기반이 되는 난수 생성기를 제어하는 이러한 입력값을 제거할 계획은 없습니다. 하지만 rng
함수가 다음과 같은 이유로 권장됩니다.
'seed'
및'state'
생성기에는 결함이 있습니다.'seed'
및'state'
라는 용어는 생성기에 대해 오해를 불러일으키는 이름입니다.'seed'
는 시드 초기화 값이 아니라 MATLAB v4 생성기를 나타냅니다.'state'
는 생성기의 내부 상태가 아니라 v5 생성기를 나타냅니다.이 세 개의 입력값은
rand
와randn
에 불필요하게 다른 생성기를 사용합니다.
코드 업데이트에 대한 자세한 내용은 권장되지 않는 rand 구문과 randn 구문 대체하기 항목을 참조하십시오.
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)