다차원 배열
MATLAB®에서 다차원 배열은 3차원 이상의 배열입니다. 행렬에서 2차원은 행과 열로 표현됩니다.
각 요소는 2개의 첨자, 즉 행 인덱스와 열 인덱스로 정의됩니다. 다차원 배열은 2차원 행렬을 확장한 것으로, 인덱싱에 추가 첨자를 사용합니다. 예를 들어, 3차원 배열은 3개의 첨자를 사용합니다. 처음 2개 차원은 행렬과 같이 행과 열을 나타내며, 세 번째 차원은 요소의 페이지 또는 시트를 나타냅니다.
다차원 배열 만들기
먼저 2차원 행렬을 만든 후 확장하여 다차원 배열을 만들 수 있습니다. 예를 들어, 먼저 3×3 행렬을 3차원 배열의 첫 번째 페이지로 정의해 보겠습니다.
A = [1 2 3; 4 5 6; 7 8 9]
A = 3×3
1 2 3
4 5 6
7 8 9
이제 두 번째 페이지를 추가합니다. 이 작업을 수행하려면 세 번째 차원의 인덱스 값 2에 또 다른 3×3 행렬을 할당하십시오. 구문 A(:,:,2)
는 첫 번째 차원과 두 번째 차원에 콜론을 사용하여 대입식의 우변에 있는 행과 열을 모두 포함시킵니다.
A(:,:,2) = [10 11 12; 13 14 15; 16 17 18]
A = A(:,:,1) = 1 2 3 4 5 6 7 8 9 A(:,:,2) = 10 11 12 13 14 15 16 17 18
cat
함수는 다차원 배열을 생성하는 데 유용한 툴입니다. 예를 들어, A
를 세 번째 페이지와 결합하여 새 3차원 배열 B
를 생성해 보겠습니다. 첫 번째 인수는 함께 결합할 차원을 나타냅니다.
B = cat(3,A,[3 2 1; 0 9 8; 5 3 7])
B = B(:,:,1) = 1 2 3 4 5 6 7 8 9 B(:,:,2) = 10 11 12 13 14 15 16 17 18 B(:,:,3) = 3 2 1 0 9 8 5 3 7
다차원 배열을 빠르게 확장하는 또 다른 방법은 전체 페이지에 단일 요소를 할당하는 것입니다. 예를 들어, B
에 모두 0으로 구성된 네 번째 페이지를 추가해 보겠습니다.
B(:,:,4) = 0
B = B(:,:,1) = 1 2 3 4 5 6 7 8 9 B(:,:,2) = 10 11 12 13 14 15 16 17 18 B(:,:,3) = 3 2 1 0 9 8 5 3 7 B(:,:,4) = 0 0 0 0 0 0 0 0 0
요소 액세스
다차원 배열의 요소에 액세스하려면 벡터 및 행렬에서와 마찬가지로 정수 첨자를 사용하십시오. 예를 들어, A
에서 A
의 첫 번째 행, 두 번째 열, 두 번째 페이지인 1,2,2 요소를 찾아 보겠습니다.
A
A = A(:,:,1) = 1 2 3 4 5 6 7 8 9 A(:,:,2) = 10 11 12 13 14 15 16 17 18
elA = A(1,2,2)
elA = 11
두 번째 차원에서 인덱스 벡터 [1 3]
을 사용하여 A
의 각 페이지의 첫 번째 열과 마지막 열에만 액세스합니다.
C = A(:,[1 3],:)
C = C(:,:,1) = 1 3 4 6 7 9 C(:,:,2) = 10 12 13 15 16 18
각 페이지의 두 번째 행과 세 번째 행을 찾으려면 콜론 연산자를 사용하여 인덱스 벡터를 생성하십시오.
D = A(2:3,:,:)
D = D(:,:,1) = 4 5 6 7 8 9 D(:,:,2) = 13 14 15 16 17 18
배열 조작하기
다차원 배열의 요소는 벡터 및 행렬과 마찬가지로, 여러 가지 방법으로 이동할 수 있습니다. 함수 reshape
, permute
, squeeze
는 요소를 재배열하는 데 유용합니다. 2페이지로 구성된 3차원 배열이 있다고 가정하겠습니다.
다차원 배열의 형태를 변경하면 특정 연산을 수행하거나 데이터를 시각화하는 데 유용할 수 있습니다. reshape
함수를 사용하여 3차원 배열의 요소를 6×5 행렬로 재배열해 보겠습니다.
A = [1 2 3 4 5; 9 0 6 3 7; 8 1 5 0 2]; A(:,:,2) = [9 7 8 5 2; 3 5 8 5 1; 6 9 4 3 3]; B = reshape(A,[6 5])
B = 6×5
1 3 5 7 5
9 6 7 5 5
8 5 2 9 3
2 4 9 8 2
0 3 3 8 1
1 0 6 4 3
reshape
는 열을 기준으로 연산을 수행하는데, A
의 열을 교차하며 후속 열을 열 밑으로 내려서 새 행렬을 만들며, 첫 번째 페이지부터 시작하여 두 번째 페이지로 이동합니다.
배열의 차원 순서를 재배열하는 데는 치환이 사용됩니다. 3차원 배열 M
이 있다고 가정하겠습니다.
M(:,:,1) = [1 2 3; 4 5 6; 7 8 9]; M(:,:,2) = [0 5 4; 2 7 6; 9 3 1]
M = M(:,:,1) = 1 2 3 4 5 6 7 8 9 M(:,:,2) = 0 5 4 2 7 6 9 3 1
permute
함수에서 두 번째 인수에 차원 순서를 지정하여 각 페이지의 행 첨자와 열 첨자를 서로 바꿉니다. M
의 원래 행은 이제 열이 되고, 원래 열은 행이 됩니다.
P1 = permute(M,[2 1 3])
P1 = P1(:,:,1) = 1 4 7 2 5 8 3 6 9 P1(:,:,2) = 0 2 9 5 7 3 4 6 1
마찬가지로, M
의 행 첨자와 페이지 첨자를 서로 바꿀 수 있습니다.
P2 = permute(M,[3 2 1])
P2 = P2(:,:,1) = 1 2 3 0 5 4 P2(:,:,2) = 4 5 6 2 7 6 P2(:,:,3) = 7 8 9 9 3 1
다차원 배열을 사용할 경우, 길이가 1인 불필요한 차원이 있는 배열을 발견할 수 있습니다. squeeze
함수는 길이가 1인 차원을 제거하는 또 다른 유형의 조작을 수행합니다. 예를 들어, repmat
함수를 사용하여 요소가 모두 5이고 세 번째 차원의 길이가 1인 2×3×1×4 배열을 만들어 보겠습니다.
A = repmat(5,[2 3 1 4])
A = A(:,:,1,1) = 5 5 5 5 5 5 A(:,:,1,2) = 5 5 5 5 5 5 A(:,:,1,3) = 5 5 5 5 5 5 A(:,:,1,4) = 5 5 5 5 5 5
szA = size(A)
szA = 1×4
2 3 1 4
numdimsA = ndims(A)
numdimsA = 4
squeeze
함수로 세 번째 차원을 제거하여 3차원 배열을 만듭니다.
B = squeeze(A)
B = B(:,:,1) = 5 5 5 5 5 5 B(:,:,2) = 5 5 5 5 5 5 B(:,:,3) = 5 5 5 5 5 5 B(:,:,4) = 5 5 5 5 5 5
szB = size(B)
szB = 1×3
2 3 4
numdimsB = ndims(B)
numdimsB = 3