주요 콘텐츠

배열 인덱싱

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

이 요소들에 액세스하는 또 다른 방법은 키워드 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 = 1×4

     9    10    11    12

콜론 연산자와 end 키워드를 사용하여 A의 두 번째 열에서 마지막 열까지 액세스할 수도 있습니다.

r = A(:,end-1)
r = 4×1

     3
     7
    11
    15

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

t = [datetime(2018,1:5,1); datetime(2019,1:5,1)]
t = 2×5 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 = 2×1 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 = 2×3 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 = 1×6 logical array

   0   0   1   0   0   1

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

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

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

논리값과 요소 위치를 사용하여 혼합 인덱싱하기

위치 인덱싱과 논리형 인덱싱을 함께 사용하여 배열 요소에 액세스할 수도 있습니다.

예를 들어, 5×5 행렬을 만들어 보겠습니다.

A = magic(5)
A = 5×5

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

A에서 행 인덱스는 소수 번호이고 열 인덱스는 2, 3, 4인 범위에 있는 요소를 선택한다고 가정하겠습니다.

5-by-5 matrix, with selected elements in rows with prime indices 2, 3, and 5, and in columns with indices 2, 3, and 4

이를 위해 A의 행 인덱스를 나타내는 벡터 B를 만듭니다.

B = (1:size(A,1))
B = 1×5

     1     2     3     4     5

isprime 함수를 사용하여 B에서 어떤 요소가 소수인지 확인합니다. 결과로 논리형 배열이 반환됩니다. 이 논리형 배열을 사용하여 A의 행의 요소를 참조할 수 있습니다.

rows = isprime(B)
rows = 1×5 logical array

   0   1   1   0   1

그다음으로, 선택하려는 열을 정의합니다. 여기서는 위치 2~4에 해당합니다.

cols = 2:4
cols = 1×3

     2     3     4

논리형 인덱싱을 사용하여, A에서 rows에 의해 정의된 소수 번호 위치에 해당하는 행을 선택합니다. 그런 다음 위치 기준 인덱싱을 사용하여, A에서 cols에 의해 정의된 위치 2~4 범위에 해당하는 열을 선택합니다.

A(rows,cols)
ans = 3×3

     5     7    14
     6    13    20
    18    25     2

참고 항목

도움말 항목

외부 웹사이트