diag
대각 행렬을 생성하거나 행렬의 대각선 요소 가져오기
설명
예제
대각 행렬 생성
1×5 벡터를 생성합니다.
v = [2 1 -1 -2 -5];
diag
를 사용하여 주대각선에 v
요소를 가진 행렬을 만듭니다.
D = diag(v)
D = 5×5
2 0 0 0 0
0 1 0 0 0
0 0 -1 0 0
0 0 0 -2 0
0 0 0 0 -5
첫 번째 상부 대각선(k=1
)에 v
의 요소를 가지는 행렬을 만듭니다.
D1 = diag(v,1)
D1 = 6×6
0 2 0 0 0 0
0 0 1 0 0 0
0 0 0 -1 0 0
0 0 0 0 -2 0
0 0 0 0 0 -5
0 0 0 0 0 0
그 결과로 6×6 행렬이 생성됩니다. 입력값으로 길이가 n
인 벡터를 지정하는 경우 diag
는 크기가 n+abs(k)
인 정사각 행렬을 반환합니다.
대각선 요소 가져오기
6×6 확률 행렬의 주대각선 요소를 가져옵니다.
A = randi(10,6)
A = 6×6
9 3 10 8 7 8
10 6 5 10 8 1
2 10 9 7 8 3
10 10 2 1 4 1
7 2 5 9 7 1
1 10 10 10 2 9
x = diag(A)
x = 6×1
9
6
9
1
7
9
A
의 첫 번째 하부대각선(k=-1
)상의 요소를 가져옵니다. 그 결과로 주대각선보다 요소가 한 개 더 적어집니다.
x1 = diag(A,-1)
x1 = 5×1
10
10
2
9
2
diag
를 두 번 호출하면 원본 행렬의 대각선 요소로 구성된 대각 행렬이 반환됩니다.
A1 = diag(diag(A))
A1 = 6×6
9 0 0 0 0 0
0 6 0 0 0 0
0 0 9 0 0 0
0 0 0 1 0 0
0 0 0 0 7 0
0 0 0 0 0 9
입력 인수
v
— 대각선 요소
벡터
대각선 요소로, 벡터로 지정됩니다. v
가 N
개 요소를 가진 벡터인 경우 diag(v,k)
는 차수 N+abs(k)
의 정사각 행렬입니다.
diag([])
는 빈 행렬 []
을 반환합니다.
데이터형: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
| char
복소수 지원 여부: 예
A
— 입력 행렬
행렬
입력 행렬입니다. ndims(A) > 2
인 경우 diag
는 오류를 반환합니다.
diag([])
는 빈 행렬 []
을 반환합니다.
데이터형: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
| char
복소수 지원 여부: 예
k
— 대각선 번호
정수
대각선 번호로, 정수로 지정됩니다. k=0
은 주대각선을 나타내고 k>0
은 주대각선 위쪽이고 k<0
은 주대각선 아래쪽입니다.
m×n 행렬의 경우 k
는 범위 내에 있습니다. 예를 들어 n이 m보다 큰 행렬의 경우 k=0
인 주대각선은 인덱스가 (1,1)
, (2,2)
, ..., (m,m)
인 요소로 구성됩니다. k=1
인 주대각선 위쪽은 인덱스가 (1,2)
, (2,3)
, ..., (m,m+1)
인 요소로 구성됩니다. k=-1
인 주대각선 아래쪽은 인덱스가 (2,1)
, (3,2)
, ..., (m,m-1)
인 요소로 구성됩니다.
팁
행렬의
trace
는sum(diag(A))
와 동일합니다.
확장 기능
C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.
사용법 관련 참고 및 제한 사항:
k
를 제공할 경우 그 값은 실수형 정수 스칼라 값이어야 합니다.가변 길이 벡터(1×: 또는 :×1)인 가변 크기 입력값에 대해
diag
는 다음과 같이 동작합니다.입력값을 벡터로 취급
지정한 대각선을 따라 입력 벡터가 있는 행렬 반환
가변 길이 벡터가 아닌 가변 크기 입력값에 대해
diag
는 다음과 같이 동작합니다.입력값을 행렬로 취급
런타임에 입력값으로 벡터를 받을 수 없음
가변 길이 벡터 반환
입력값이 가변 크기(:m×:n)이고 런타임에 0×0 형태인 경우 출력값은 0×0이 아니라 0×1입니다. 하지만 입력값에 크기가 0×0인 상수가 포함되어 있으면 출력값은
[]
입니다.가변 길이 벡터(1×: 또는 :×1)가 아닌 가변 크기 입력값의 경우
diag
는 입력값을 대각 벡터를 추출할 행렬로 취급합니다. 입력 배열이 런타임에 벡터인 경우에도 이와 같이 동작합니다.diag
가 1×: 또는 :×1이 아닌 가변 크기 입력값으로 행렬을 만들도록 하려면 다음을 사용하십시오.diag(x)
대신diag(x(:))
diag(x,k)
대신diag(x(:),k)
Variable-Sizing Restrictions for Code Generation of Toolbox Functions (MATLAB Coder) 항목을 참조하십시오.
GPU 코드 생성
GPU Coder™를 사용하여 NVIDIA® GPU용 CUDA® 코드를 생성할 수 있습니다.
사용법 관련 참고 및 제한 사항:
k
를 제공할 경우 그 값은 실수형 정수 스칼라 값이어야 합니다.가변 길이 벡터(1×: 또는 :×1)인 가변 크기 입력값에 대해
diag
는 다음과 같이 동작합니다.입력값을 벡터로 취급
지정한 대각선을 따라 입력 벡터가 있는 행렬 반환
가변 길이 벡터가 아닌 가변 크기 입력값에 대해
diag
는 다음과 같이 동작합니다.입력값을 행렬로 취급
런타임에 입력값으로 벡터를 받을 수 없음
가변 길이 벡터 반환
입력값이 가변 크기(:m×:n)이고 런타임에 0×0 형태인 경우 출력값은 0×0이 아니라 0×1입니다. 하지만 입력값에 크기가 0×0인 상수가 포함되어 있으면 출력값은
[]
입니다.가변 길이 벡터(1×: 또는 :×1)가 아닌 가변 크기 입력값의 경우
diag
는 입력값을 대각 벡터를 추출할 행렬로 취급합니다. 입력 배열이 런타임에 벡터인 경우에도 이와 같이 동작합니다.diag
가 1×: 또는 :×1이 아닌 가변 크기 입력값으로 행렬을 만들도록 하려면 다음을 사용하십시오.diag(x)
대신diag(x(:))
diag(x,k)
대신diag(x(:),k)
스레드 기반 환경
MATLAB®의 backgroundPool
을 사용해 백그라운드에서 코드를 실행하거나 Parallel Computing Toolbox™의 ThreadPool
을 사용해 코드 실행 속도를 높일 수 있습니다.
이 함수는 스레드 기반 환경을 완전히 지원합니다. 자세한 내용은 스레드 기반 환경에서 MATLAB 함수 실행하기 항목을 참조하십시오.
GPU 배열
Parallel Computing Toolbox™를 사용해 GPU(그래픽스 처리 장치)에서 실행하여 코드 실행 속도를 높일 수 있습니다.
diag
함수는 GPU 배열을 완전히 지원합니다. GPU에서 이 함수를 실행하려면 입력 데이터를 gpuArray
(Parallel Computing Toolbox)로 지정하십시오. 자세한 내용은 GPU에서 MATLAB 함수 실행하기 (Parallel Computing Toolbox) 항목을 참조하십시오.
분산 배열
Parallel Computing Toolbox™를 사용하여 대규모 배열을 클러스터의 결합된 메모리에 걸쳐 분할할 수 있습니다.
이 함수는 분산 배열을 완전히 지원합니다. 자세한 내용은 분산 배열을 사용하여 MATLAB 함수 실행 (Parallel Computing Toolbox) 항목을 참조하십시오.
버전 내역
R2006a 이전에 개발됨
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)