HOWTO · MATLAB
MATLAB에서 3D 행렬에 벡터를 추가하는 방법
이 기사에서는 MATLAB에서 3D 행렬에 벡터를 추가하는 방법을 안내합니다.
이 페이지의 내용
MATLAB은 3D 배열을 행, 열, 페이지로 저장합니다. 호환되는 페이지를 끝에 추가하려면 cat(3, A, page)를 사용해 차원 3을 따라 연결하거나 A(:,:,end+1) = page를 사용해 할당합니다. 새 페이지는 기존 각 페이지와 동일한 행 및 열 차원을 가져야 합니다. 행 벡터는 각 페이지에 행이 하나 있을 때 완전한 페이지가 되며, 열 벡터는 각 페이지에 열이 하나 있을 때 완전한 페이지가 됩니다.
3D 행렬 페이지와 크기 호환성 이해하기
3D 배열은 첫 번째가 행 차원, 두 번째가 열 차원, 세 번째가 페이지 차원입니다. 예를 들어, 크기가 2-by-3-by-4인 배열에는 각각 두 행과 세 열을 가진 페이지가 네 개 포함됩니다. MATLAB은 이러한 페이지를 별도로 표시하며, 요소는 A(1,2,3)와 같은 행, 열, 페이지 인덱스로 주소가 지정됩니다. 전체 페이지를 선택하려면 A(:,:,k)를 사용합니다. 예를 들어, A(:,:,3)는 세 번째 페이지를 선택합니다.
세 번째 차원을 따라 추가하면 처음 두 차원은 고정된 채 페이지 수가 늘어납니다. A의 크기가 M-by-N-by-P이면 추가하는 페이지는 M-by-N이어야 하며, 따라서 결과의 크기는 M-by-N-by-(P+1)이 됩니다. 벡터는 그 방향과 길이가 페이지 모양과 일치할 때만 직접 그 페이지로 사용될 수 있습니다. 1-by-N 행 벡터는 행이 하나인 페이지에 맞고, M-by-1 열 벡터는 열이 하나인 페이지에 맞습니다. 일반적인 M-by-N 페이지의 경우, 먼저 값을 M-by-N 행렬로 배열하세요.
cat을 사용해 벡터를 새 페이지로 추가하기
cat(3, A, page)를 사용하면 페이지 차원을 따라 page를 A의 끝에 결합할 수 있습니다. 첫 번째 인수는 차원을 선택합니다. cat(1, ...)을 사용하면 행이 추가되고, cat(2, ...)을 사용하면 열이 추가됩니다. 나머지 차원은 일치해야 하며, 그래서 아래 벡터는 항목이 두 개이고 기존 페이지는 각각 한 행과 두 열을 가집니다.
이 Octave 호환 MATLAB 예제는 두 개의 페이지를 만든 다음 행 벡터를 세 번째 페이지로 추가합니다.
A = reshape(1:4, 1, 2, 2);
page = [5 6];
A = cat(3, A, page);
disp(size(A));
disp(A(:,:,3));
1 2 3
5 6
새 배열에는 페이지가 세 개 있습니다. 그 세 번째 페이지에는 page의 값이 같은 순서로 포함됩니다. MATLAB에서 cat()은 원래 배열과 추가된 페이지로부터 새 배열 값을 만들고 싶을 때 유용합니다. 해당 변수를 업데이트하려면 결과를 다시 A에 할당하세요.
인덱싱을 사용해 벡터를 새 페이지로 추가하기
인덱싱 할당은 cat 메서드의 대안입니다. 앞선 예제의 원래 두 페이지짜리 A로 시작하되, 그 cat 줄이 실행되기 전에, 그 줄 대신 A(:,:,end+1) = page;를 사용하세요. 두 추가 문을 연속해서 실행하지 마세요. 할당 역시 세 번째 차원을 확장하므로, cat 뒤에 실행하면 네 번째 페이지가 추가됩니다. 여기서 end는 세 번째 차원을 따라 마지막 인덱스를 가리키고, end+1은 다음 페이지를 선택합니다.
A를 직접 업데이트하는 것이 가장 명확할 때 이 형식을 사용하세요. 할당되는 page는 기존 행 및 열 차원과 일치해야 합니다. 그 방향이나 길이가 페이지 모양에 맞지 않을 경우 먼저 벡터를 배열하세요.
페이지 크기에 맞는 벡터 준비하기
벡터가 페이지보다 짧다면, 추가하기 전에 나머지 항목이 무엇을 나타내야 할지 결정하세요. 0이 의미가 있을 때는 필요한 차원의 페이지를 만들고 벡터 값을 의도한 위치에 배치하세요. 예를 들어, 첫 번째 열에 두 요소짜리 열 벡터가 포함된 2-by-3 페이지의 경우, [values(:), zeros(2,2)]와 같은 구성은 다른 두 열을 0으로 만듭니다. 그런 다음 위의 두 방법 중 하나로 그 페이지를 추가하세요.
패딩은 데이터에 대한 선택이지, 항상 안전한 모양 변환이 아닙니다. 0은 저장된 페이지의 일부가 되며 이후 계산에 영향을 미칠 수 있습니다. 누락된 값에 다른 의미가 있다면, 대신 적절한 채움 값을 사용하거나 소스 데이터를 재구성/재정렬하세요. 연결하거나 할당하기 전에 size(A,1)과 size(A,2)를 페이지의 첫 번째 및 두 번째 차원과 비교하세요. 이렇게 하면 차원 불일치를 더 쉽게 찾을 수 있고 의도한 행-열 레이아웃이 명시적으로 유지됩니다.
인덱싱으로 행, 열 또는 페이지 교체하기
기존 콘텐츠를 교체하는 것은 페이지를 추가하는 것과 다릅니다. 예를 들어, A(1,:,1) = replacementRow;는 첫 번째 페이지의 첫 번째 행을 교체하고, A(:,:,1) = replacementPage;는 기존 페이지 전체를 교체합니다. 교체 항목은 인덱싱된 영역과 동일한 요소 수와 호환되는 차원을 가져야 합니다.
목표가 배열에 이미 있는 데이터를 업데이트하는 것이라면 기존 인덱스를 사용하세요. 목표가 현재 마지막 페이지 뒤에 페이지를 추가하는 것이라면 세 번째 인덱스에 end+1을 사용하세요. 이 구분은 기존 데이터를 보존하고 다른 페이지를 추가하려던 의도와 달리 할당이 페이지를 덮어쓰는 것을 방지하는 데 도움이 됩니다.