Main Content

배열 인덱싱

MATLAB®에는 배열에서의 요소 위치(인덱스)를 기준으로 배열 요소에 액세스할 수 있는 세 가지 기본 방법이 있습니다. 위치 기준 인덱싱, 선형 인덱싱, 논리형 인덱싱이 그것입니다.

요소 위치를 사용하여 인덱싱하기

가장 일반적인 방법은 요소의 인덱스를 명시적으로 지정하는 것입니다. 예를 들어, 행렬의 단일 요소에 액세스하려면 요소의 행 번호 다음에 열 번호를 지정하십시오.

A = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]
A = 4×4

     1     2     3     4
     5     6     7     8
     9    10    11    12
    13    14    15    16

e = A(3,2)
e = 10

eA의 3,2 위치(세 번째 행, 두 번째 열)에 있는 요소입니다.

요소 인덱스를 벡터로 지정하여 한 번에 여러 개의 요소를 참조할 수도 있습니다. 예를 들어, A의 두 번째 행에 있는 첫 번째 요소와 세 번째 요소에 액세스해 보겠습니다.

r = A(2,[1 3])
r = 1×2

     5     7

특정 범위의 행 또는 열에 있는 요소에 액세스하려면 colon을 사용하십시오. 예를 들어, A의 행 1~3과 열 2~4 범위에 있는 요소에 액세스해 보겠습니다.

r = A(1:3,2:4)
r = 3×3

     2     3     4
     6     7     8
    10    11    12

r을 계산하는 또 다른 방법은 키워드 end를 사용하여 두 번째 열부터 마지막 열까지 지정하는 것입니다. 이 방법을 사용하면 A에 몇 개의 열이 있는지 정확하게 알지 못해도 마지막 열을 지정할 수 있습니다.

r = A(1:3,2:end)
r = 3×3

     2     3     4
     6     7     8
    10    11    12

행 또는 열 전체에 액세스하려면 콜론 연산자만 사용하십시오. 예를 들어, A의 세 번째 열 전체를 반환해 보겠습니다.

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

     3
     7
    11
    15

일반적으로 MATLAB에서는 인덱싱을 사용하여 데이터형 또는 차원에 상관없이 모든 배열의 요소에 액세스할 수 있습니다. 예를 들어, datetime 배열의 열에 직접 액세스해 보겠습니다.

t = [datetime(2018,1:5,1); datetime(2019,1:5,1)]
t = 2x5 datetime
   01-Jan-2018   01-Feb-2018   01-Mar-2018   01-Apr-2018   01-May-2018
   01-Jan-2019   01-Feb-2019   01-Mar-2019   01-Apr-2019   01-May-2019

march1 = t(:,3)
march1 = 2x1 datetime
   01-Mar-2018
   01-Mar-2019

더 높은 차원의 배열의 경우, 배열 차원과 일치하도록 구문을 확장합니다. 3×3×3 랜덤 숫자형 배열이 있다고 가정하겠습니다. 배열의 두 번째 행, 세 번째 열, 첫 번째 시트에 있는 요소에 액세스합니다.

A = rand(3,3,3);
e = A(2,3,1)
e = 0.5469

다차원 배열을 사용하는 방법에 대한 자세한 내용은 다차원 배열 항목을 참조하십시오.

단일 인덱스를 사용하여 인덱싱하기

배열의 요소에 액세스하는 또 다른 방법은 배열의 크기 또는 차원에 상관없이 단일 인덱스만 사용하는 것입니다. 이 방법을 선형 인덱싱이라고 합니다. MATLAB은 배열을 정의된 크기 및 형태에 따라 표시하지만, 실제로는 메모리에 하나의 열로 구성된 요소로 저장합니다. 이 개념을 시각화하는 좋은 방법은 행렬을 사용하는 것입니다. 다음 배열은 3×3 행렬로 표시되지만, MATLAB은 행렬 A의 열을 차례대로 연결하여 하나의 열로 저장합니다. 저장된 벡터에는 일련의 요소 12, 45, 33, 36, 29, 25, 91, 48, 11이 들어 있으며, 하나의 콜론을 사용하여 이를 확인할 수 있습니다.

A = [12 36 91; 45 29 48; 33 25 11]
A = 3×3

    12    36    91
    45    29    48
    33    25    11

Alinear = A(:)
Alinear = 9×1

    12
    45
    33
    36
    29
    25
    91
    48
    11

예를 들어, A의 3,2 요소는 25이며, 구문 A(3,2)를 사용하여 액세스할 수 있습니다. 또한 25는 저장된 벡터 수열의 여섯 번째 요소이므로 구문 A(6)을 사용하여 이 요소에 액세스할 수도 있습니다.

e = A(3,2)
e = 25
elinear = A(6)
elinear = 25

선형 인덱싱은 시각적으로 직관성이 떨어지지만, 배열의 크기 또는 형태에 영향을 받지 않는 특정 연산을 수행하는 데 효과적일 수 있습니다. 예를 들어, sum 함수에 두 번째 인수를 제공하지 않고도 A에 있는 모든 요소의 합을 쉽게 구할 수 있습니다.

s = sum(A(:))
s = 330

sub2ind 함수와 ind2sub 함수는 원래 배열 인덱스와 선형 인덱스 간 변환에 유용합니다. 예를 들어, A의 3,2 요소에 해당하는 선형 인덱스를 계산해 보겠습니다.

linearidx = sub2ind(size(A),3,2)
linearidx = 6

선형 인덱스를 다시 행과 열 형식으로 변환합니다.

[row,col] = ind2sub(size(A),6)
row = 3
col = 2

논리값을 사용하여 인덱싱하기

논리값 표시자 true와 false를 사용하면 특히 조건문을 사용할 때 배열의 요소를 참조하는 데 유용합니다. 예를 들어, 행렬 A의 요소가 또 다른 행렬 B의 대응하는 요소보다 작은지 여부를 알고자 한다고 가정하겠습니다. '보다 작음' 연산자는 A의 요소가 대응하는 B의 요소보다 작을 경우 1을 요소로 갖는 논리형 배열을 반환합니다.

A = [1 2 6; 4 3 6]
A = 2×3

     1     2     6
     4     3     6

B = [0 3 7; 3 7 5]
B = 2×3

     0     3     7
     3     7     5

ind = A<B
ind = 2x3 logical array

   0   1   1
   0   1   0

조건을 충족하는 요소의 위치를 확인했기 때문에 ind를 인덱스 배열로 사용하여 개별 값을 검토할 수 있습니다. MATLAB은 ind에 있는 값 1의 위치와 AB의 대응하는 요소를 연결지어 해당 값을 열 벡터로 표시합니다.

Avals = A(ind)
Avals = 3×1

     2
     3
     6

Bvals = B(ind)
Bvals = 3×1

     3
     7
     7

또한 MATLAB의 "is" 함수는 입력값에서 특정 조건을 충족하는 요소를 나타내는 논리형 배열을 반환합니다. 예를 들어, ismissing 함수를 사용하여 string 벡터에서 누락된 요소를 확인해 보겠습니다.

str = ["A" "B" missing "D" "E" missing];
ind = ismissing(str)
ind = 1x6 logical array

   0   0   1   0   0   1

누락되지 않은 요소의 값을 찾고자 한다고 가정하겠습니다. 이 작업을 수행하려면 인덱스 벡터 ind~ 연산자를 함께 사용하십시오.

strvals = str(~ind)
strvals = 1x4 string
    "A"    "B"    "D"    "E"

논리형 인덱싱 사용에 대한 다른 예제는 조건을 충족하는 배열 요소 찾기 항목을 참조하십시오.

관련 항목

외부 웹사이트