Main Content

행렬 생성, 결합, 확장하기

가장 기본적인 MATLAB® 데이터 구조는 행렬입니다. 행렬은 행과 열로 정렬되어 있는 데이터 요소로 구성된 2차원 사각 배열입니다. 요소는 숫자이거나 논리값(true 또는 false), 날짜/시간, string형, categorical 값 또는 다른 MATLAB 데이터형일 수 있습니다.

숫자 하나도 행렬로 저장됩니다. 예를 들어, 값 100이 포함된 변수는 double형 1×1 행렬로 저장됩니다.

A = 100;
whos A
  Name      Size            Bytes  Class     Attributes

  A         1x1                 8  double              

데이터로 구성된 행렬 생성하기

특정 데이터 세트가 있는 경우 대괄호를 사용하여 데이터의 요소를 행렬로 정렬할 수 있습니다. 데이터의 한 행에는 요소 사이에 공백 또는 쉼표가 있으며, 각 행은 세미콜론으로 구분합니다. 예를 들어, 4개의 숫자형 요소로 구성된 하나의 행을 생성해 보겠습니다. 결과로 나타나는 행렬은 행 1개와 열 4개를 가지므로 크기는 1×4입니다. 이러한 형태의 행렬을 대개 행 벡터라고 합니다.

A = [12 62 93 -8]
A = 1×4

    12    62    93    -8

sz = size(A)
sz = 1×2

     1     4

이제 동일한 숫자로 행렬을 만들되 2개의 행으로 정렬해 보겠습니다. 이 행렬에는 행 2개와 열 2개가 있습니다.

A = [12 62; 93 -8]
A = 2×2

    12    62
    93    -8

sz = size(A)
sz = 1×2

     2     2

특화된 행렬 함수

MATLAB에는 특정 값 또는 특정 구조를 가진 행렬을 생성하는 데 도움이 되는 여러 함수가 들어 있습니다. 예를 들어, zeros 함수와 ones 함수는 각각 0 또는 1로만 구성된 행렬을 생성합니다. 이러한 함수의 첫 번째 인수와 두 번째 인수는 각각 행렬의 행 개수와 열 개수입니다.

A = zeros(3,2)
A = 3×2

     0     0
     0     0
     0     0

B = ones(2,4)
B = 2×4

     1     1     1     1
     1     1     1     1

diag 함수는 행렬의 대각선상에 입력 요소를 배치합니다. 예를 들어, 4개의 요소가 포함된 행 벡터 A를 생성해 보겠습니다. 그런 다음, A의 요소가 대각선 요소로 배치된 4×4 행렬을 생성합니다.

A = [12 62 93 -8];
B = diag(A)
B = 4×4

    12     0     0     0
     0    62     0     0
     0     0    93     0
     0     0     0    -8

createArray 함수(R2024a 이후)는 거의 모든 MATLAB 데이터형으로 구성된 배열을 반환할 수 있습니다. 이 함수는 zerosones와 동일한 구문을 사용하여 배열의 크기를 정의하며, 이 외에도 배열의 내용을 지정하기 위한 몇 가지 옵션을 제공합니다. 예를 들어, 채우기 값을 지정할 수 있습니다.

C = createArray(2,3,FillValue=duration(1,15,0))
C = 2x3 duration
   01:15:00   01:15:00   01:15:00
   01:15:00   01:15:00   01:15:00

행렬 결합(Concatenate)하기

대괄호를 사용하여 기존 행렬들을 추가할 수도 있습니다. 이와 같은 행렬 생성 방법을 결합이라고 합니다. 예를 들어, 2개의 행 벡터를 결합하여 더 긴 1개의 행 벡터를 만들어 보겠습니다.

A = ones(1,4);
B = zeros(1,4);
C = [A B]
C = 1×8

     1     1     1     1     0     0     0     0

AB를 행렬의 2개 행으로 정렬하려면 세미콜론을 사용하십시오.

D = [A; B]
D = 2×4

     1     1     1     1
     0     0     0     0

여러 행렬을 결합하려면 크기가 서로 호환되어야 합니다. 즉, 행렬을 가로로 결합할 경우 행 개수가 동일해야 합니다. 행렬을 세로로 결합할 경우에는 열 개수가 동일해야 합니다.

예를 들어, 행이 2개인 행렬 2개를 생성해 보겠습니다. 대괄호를 사용하여 첫 번째 행렬에 두 번째 행렬을 가로로 추가합니다.

A = ones(2,3)
A = 2×3

     1     1     1
     1     1     1

B = zeros(2,2)
B = 2×2

     0     0
     0     0

C = [A B]
C = 2×5

     1     1     1     0     0
     1     1     1     0     0

호환되는 행렬을 결합하는 또 다른 방법은 horzcat, vertcat, cat 같은 결합 함수를 사용하는 것입니다. horzcat를 사용하여 첫 번째 행렬에 두 번째 행렬을 가로로 추가합니다.

D = horzcat(A,B)
D = 2×5

     1     1     1     0     0
     1     1     1     0     0

수열 생성하기

colon을 사용하면 균일한 간격으로 요소가 순차적으로 정렬된 행렬을 간편하게 생성할 수 있습니다. 예를 들어, 1부터 10까지의 정수를 요소로 갖는 행 벡터를 생성해 보겠습니다.

A = 1:10
A = 1×10

     1     2     3     4     5     6     7     8     9    10

콜론 연산자를 사용하면 어떤 범위에서나 1씩 증분하는 수열을 생성할 수 있습니다.

A = -2.5:2.5
A = 1×6

   -2.5000   -1.5000   -0.5000    0.5000    1.5000    2.5000

수열 증분값을 변경하려면 콜론으로 구분하여 범위의 시작 값과 끝 값 사이에 증분값을 지정하십시오.

A = 0:2:10
A = 1×6

     0     2     4     6     8    10

수열을 감소시키려면 음수를 사용하십시오.

A = 6:-1:0
A = 1×7

     6     5     4     3     2     1     0

정수가 아닌 값으로 증분할 수도 있습니다. 증분값이 지정된 범위를 균일하게 분할하지 않는 경우, MATLAB은 범위를 초과하기 전에 도달할 수 있는 마지막 값에서 수열을 자동으로 종료합니다.

A = 1:0.2:2.1
A = 1×6

    1.0000    1.2000    1.4000    1.6000    1.8000    2.0000

행렬 확장하기

하나 이상의 요소를 추가해 행렬의 크기를 확장하려면 기존 행 인덱스와 열 인덱스를 초과한 위치에 요소를 배치하면 됩니다. MATLAB은 행렬의 나머지 성분을 0으로 자동으로 채워서 사각형으로 유지합니다. 예를 들어, 2×3 행렬을 생성한 후 (3,4) 위치에 요소를 삽입하여 행과 열을 1개씩 추가해 보겠습니다.

A = [10  20  30; 60  70  80]
A = 2×3

    10    20    30
    60    70    80

A(3,4) = 1 
A = 3×4

    10    20    30     0
    60    70    80     0
     0     0     0     1

기존 인덱스 범위의 외부에 새 행렬을 삽입하여 크기를 확장할 수도 있습니다.

A(4:5,5:6) = [2 3; 4 5]
A = 5×6

    10    20    30     0     0     0
    60    70    80     0     0     0
     0     0     0     1     0     0
     0     0     0     0     2     3
     0     0     0     0     4     5

for 루프 내에서와 같이 행렬의 크기를 반복적으로 확장하려면 예상하는 최대 행렬 크기만큼 공간을 사전할당하는 것이 가장 좋습니다. 사전할당을 하지 않으면 크기가 증가할 때마다 MATLAB이 메모리를 할당해야 하기 때문에 작업 속도가 느려집니다. 예를 들어, 요소를 0으로 초기화하여 최대 10,000개 행과 10,000개 열이 포함된 행렬을 사전할당해 보겠습니다.

A = zeros(10000,10000);

나중에 추가 요소를 사전할당해야 하는 경우, 행렬 인덱스 범위의 외부에 요소를 할당하여 행렬을 확장하거나 사전할당된 다른 행렬을 A에 결합할 수 있습니다.

빈 배열

MATLAB에서 빈 배열은 하나 이상의 차원 길이가 0인 배열입니다. 빈 배열은 "없음" 개념을 프로그래밍 방식으로 표현하는 데 유용합니다. 예를 들어, 벡터에서 0보다 작은 요소를 모두 찾으려고 하는데 이에 해당하는 요소가 없다고 가정해 보겠습니다. find 함수는 빈 인덱스 벡터를 반환하며, 이는 0보다 작은 요소를 찾지 못했다는 의미입니다.

A = [1 2 3 4];
ind = find(A<0)
ind =

  1x0 empty double row vector

대다수의 알고리즘에는 빈 배열을 반환할 수 있는 함수 호출이 포함되어 있습니다. 빈 배열을 특수한 경우로 처리하는 대신, 빈 배열이 함수 인수로서 이러한 알고리즘을 통과할 수 있도록 허용하는 것이 훨씬 유용할 수 있습니다. 빈 배열 처리를 사용자 지정해야 하는 경우, isempty 함수를 사용하여 빈 배열을 확인할 수 있습니다.

TF = isempty(ind)
TF = logical
   1

관련 항목