spdiags
0이 아닌 대각선 추출 및 희소 띠 행렬과 대각 행렬 생성
구문
설명
예제
삼중대각 행렬 만들기
3개의 벡터를 사용하여 삼중대각 행렬을 만들고 행렬 대각선 중 일부 대각선을 변경한 후 대각선을 추출합니다.
1로 구성된 9×1 벡터를 만든 다음, 그 벡터를 사용하여 삼중대각 행렬을 만듭니다. 행렬 요소를 확인합니다.
n = 9; e = ones(n,1); A = spdiags([e -2*e e],-1:1,n,n); full(A)
ans = 9×9
-2 1 0 0 0 0 0 0 0
1 -2 1 0 0 0 0 0 0
0 1 -2 1 0 0 0 0 0
0 0 1 -2 1 0 0 0 0
0 0 0 1 -2 1 0 0 0
0 0 0 0 1 -2 1 0 0
0 0 0 0 0 1 -2 1 0
0 0 0 0 0 0 1 -2 1
0 0 0 0 0 0 0 1 -2
A
의 주대각선(d = 0
)에 있는 값을 변경합니다.
Bin = abs(-(n-1)/2:(n-1)/2)'; d = 0; A = spdiags(Bin,d,A); full(A)
ans = 9×9
4 1 0 0 0 0 0 0 0
1 3 1 0 0 0 0 0 0
0 1 2 1 0 0 0 0 0
0 0 1 1 1 0 0 0 0
0 0 0 1 0 1 0 0 0
0 0 0 0 1 1 1 0 0
0 0 0 0 0 1 2 1 0
0 0 0 0 0 0 1 3 1
0 0 0 0 0 0 0 1 4
마지막으로, A
의 대각선을 행렬의 열로 가져옵니다.
Bout = spdiags(A); full(Bout)
ans = 9×3
1 4 0
1 3 1
1 2 1
1 1 1
1 0 1
1 1 1
1 2 1
1 3 1
0 4 1
행렬에서 0이 아닌 대각선 추출하기
행렬에서 0이 아닌 대각선을 추출하고 spdiags
의 출력 형식을 검토합니다.
0이 아닌 대각선과 0으로 이루어진 대각선이 모두 포함된 행렬을 만듭니다.
A = [0 5 0 10 0 0 0 0 6 0 11 0 3 0 0 7 0 12 1 4 0 0 8 0 0 2 5 0 0 9];
행렬에서 0이 아닌 대각선을 추출합니다. 대각선 번호를 반환할 2개 출력값을 지정합니다.
[Bout,d] = spdiags(A)
Bout = 5×4
0 0 5 10
0 0 6 11
0 3 7 12
1 4 8 0
2 5 9 0
d = 4×1
-3
-2
1
3
첫 번째 출력값 Bout
의 열에는 A
의 0이 아닌 대각선이 포함됩니다. 두 번째 출력값 d
는 A
의 0이 아닌 대각선의 인덱스를 나열합니다. A
에서 0이 아닌 대각선 중 가장 긴 것은 Bout
의 세 번째 열에 있습니다. Bout
에서 모든 열 길이를 같아지도록 하기 위해, A
의 그 외 0이 아닌 대각선은 Bout
에서 대응하는 열에 추가적으로 0을 갖게 됩니다. m
×n
행렬(m < n
)의 경우 다음 규칙이 적용됩니다.
A
의 주대각선 아래에 있는 0이 아닌 대각선에 대해서는 (Bout
의 처음 두 열에서처럼) 열 상부에 0이 추가됩니다.A
의 주대각선 위에 있는 0이 아닌 대각선에 대해서는 (Bout
의 마지막 열에서처럼) 열 하부에 0이 추가됩니다.
spdiags
는 Bout
에 가장 긴 대각선이 반환되지 않더라도 이런 방식으로 Bout
을 0으로 채웁니다.
행렬에서 특정 대각선 추출하기
5×5 확률 행렬을 만듭니다.
A = randi(10,5,5)
A = 5×5
9 1 2 2 7
10 3 10 5 1
2 6 10 10 9
10 10 5 8 10
7 10 9 10 7
주대각선과 주대각선 바로 위와 바로 아래에 있는 첫 번째 대각선을 추출합니다.
d = [-1 0 1]; Bout = spdiags(A,d)
Bout = 5×3
10 9 0
6 3 1
5 10 10
10 8 10
0 7 10
5번째 상부대각선(d = 5
)을 추출해 봅니다. A
에는 상부대각선이 4개밖에 없으므로, spdiags
는 주대각선(d = 0
)과 같은 길이의 0을 대각선으로 반환합니다.
B5 = spdiags(A,5)
B5 = 5×1
0
0
0
0
0
서로 다른 크기의 열과 대각선
입력 행렬의 열이 대체하는 대각선보다 길 경우 spdiags
가 어떻게 대각선을 만드는지 살펴봅니다.
숫자 1~6으로 구성된 6×7 행렬을 만듭니다.
Bin = repmat((1:6)',[1 7])
Bin = 6×7
1 1 1 1 1 1 1
2 2 2 2 2 2 2
3 3 3 3 3 3 3
4 4 4 4 4 4 4
5 5 5 5 5 5 5
6 6 6 6 6 6 6
spdiags
를 사용하여 Bin
의 몇몇 열을 대각선으로 갖는 정사각 6×6 행렬을 만듭니다. 대각선의 일부는 요소가 하나 또는 두 개뿐이므로, Bin
의 열 크기와 A
의 대각선 크기가 일치하지 않습니다.
d = [-4 -2 -1 0 3 4 5]; A = spdiags(Bin,d,6,6); full(A)
ans = 6×6
1 0 0 4 5 6
1 2 0 0 5 6
1 2 3 0 0 6
0 2 3 4 0 0
1 0 3 4 5 0
0 2 0 4 5 6
Bin
에 있는 각 열은 6개 요소를 갖지만, A
에서는 주대각선에만 6개 요소가 있습니다. 따라서 A
의 다른 모든 대각선에서는 해당 대각선에 맞도록 Bin
의 열에 있는 요소를 자릅니다.
spdiags
가 대각선을 자르는 방식은 m
×n
행렬 A
의 크기에 따라 달라집니다. 인 경우 위 그림과 같이 동작합니다.
주대각선 아래의 대각선은 열의 상부에서부터 요소를 가져옵니다.
주대각선 위의 대각선은 열의 하부에서부터 요소를 가져옵니다.
이 동작은 인 경우 다음과 같이 반대가 됩니다.
A = spdiags(Bin,d,5,6); full(A)
ans = 5×6
1 0 0 1 1 1
2 2 0 0 2 2
3 3 3 0 0 3
0 4 4 4 0 0
5 0 5 5 5 0
주대각선 위의 대각선은 열의 상부에서부터 요소를 가져옵니다.
주대각선 아래의 대각선은 열의 하부에서부터 요소를 가져옵니다.
입력 인수
A
— 입력 행렬
행렬
입력 행렬입니다. 이 행렬은 항상 그렇지는 않지만 일반적으로 비희소 행렬입니다.
데이터형: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
복소수 지원 여부: 예
d
— 대각선 번호
스칼라 | 벡터
대각선 번호로, 스칼라 또는 양의 정수로 구성된 벡터로 지정됩니다. 대각선 번호는 다음과 같이 diag
와 동일한 규칙을 따릅니다.
d < 0
은 주대각선 아래쪽이고d >= -(m-1)
을 충족합니다.d = 0
은 주대각선을 나타냅니다.d > 0
은 주대각선 위쪽이고d <= (n-1)
을 충족합니다.
m
×n
행렬 A
에는 (m + n - 1)
개의 대각선이 있습니다. -(m-1)
에서 (n-1)
사이의 인덱스로 이러한 대각선을 벡터 d
에 지정합니다. 예를 들어, A
가 5×6인 경우, 이 행렬에는 10개의 대각선이 있을 수 있으며, 원하는 대각선을 인덱스 -4, -3, ... 4, 5를 사용하여 벡터 d
에 지정할 수 있습니다. 다음 도식은 이러한 대각선 번호 체계를 보여줍니다.
A
를 벗어나는 대각선(예: 위 예제의 경우 d = 7
)을 지정할 경우 spdiags
는 해당 대각선을 모두 0으로 반환합니다.
예: spdiags(A,[3 5])
는 A
에서 세 번째 및 다섯 번째 대각선을 추출합니다.
Bin
— 대각선 요소
행렬
대각선 요소로, 행렬로 지정됩니다. 이 행렬은 항상 그렇지는 않지만 일반적으로 비희소 행렬입니다. spdiags
는 지정한 A
의 대각선을 Bin
의 열을 사용하여 대체합니다. 요청된 출력값의 크기가 m
×n
일 경우 Bin
에는 min(m,n)
개의 열이 있어야 합니다.
S = spdiags(Bin,d,m,n)
구문에서 Bin
의 열 요소가 대체하려는 대각선의 요소보다 많고 m >= n
이면, spdiags
는 상부대각선 요소를 Bin
의 열의 밑에서부터 가져오고 하부대각선 요소를 Bin
의 열의 위에서부터 가져옵니다. 하지만 m < n
이면, 상부대각선 요소를 Bin
의 열의 위에서부터 가져오고 하부대각선 요소를 열의 밑에서부터 가져옵니다. 이 동작에 대한 예는 서로 다른 크기의 열과 대각선 항목을 참조하십시오.
데이터형: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
복소수 지원 여부: 예
m
, n
— 차원 크기
음이 아닌 정수 스칼라
차원 크기로, 음이 아닌 정수 스칼라로 지정됩니다. spdiags
는 이러한 입력값을 사용하여 생성할 행렬의 크기를 결정합니다.
예: spdiags(Bin,d,300,400)
은 지정한 대각선 d
에 B
의 열을 배치한 300×400 행렬을 생성합니다.
출력 인수
Bout
— 대각선 요소
행렬
대각선 요소로, 비희소 행렬로 반환됩니다. Bout
의 열에는 A
에서 추출한 대각선이 포함됩니다. A
를 벗어나는 위치에 대응하는 요소는 Bout
에서 모두 0으로 설정됩니다.
id
— 대각선 번호
열 벡터
대각선 번호로, 열 벡터로 반환됩니다. 대각선 번호 체계에 대한 설명은 d
를 참조하십시오.
S
— 출력 행렬
행렬
출력 행렬 S
는 다음과 같은 형식으로 생성됩니다.
S = spdiags(Bin,d,A)
의 경우, 지정한A
의 대각선이Bin
에 있는 열로 바뀌어S
가 생성됩니다.S = spdiags(Bin,d,m,n)
의 경우,d
가 지정하는 대각선에Bin
의 열이 배치되어m
×n
희소 행렬S
가 생성됩니다.
확장 기능
C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.
스레드 기반 환경
MATLAB®의 backgroundPool
을 사용해 백그라운드에서 코드를 실행하거나 Parallel Computing Toolbox™의 ThreadPool
을 사용해 코드 실행 속도를 높일 수 있습니다.
이 함수는 스레드 기반 환경을 완전히 지원합니다. 자세한 내용은 스레드 기반 환경에서 MATLAB 함수 실행하기 항목을 참조하십시오.
GPU 배열
Parallel Computing Toolbox™를 사용해 GPU(그래픽스 처리 장치)에서 실행하여 코드 실행 속도를 높일 수 있습니다.
사용법 관련 참고 및 제한 사항:
첫 번째 입력값은 희소 형식일 수 없습니다.
자세한 내용은 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)