배열 인덱싱
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
e
는 A
의 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의 위치와 A
및 B
의 대응하는 요소를 연결지어 해당 값을 열 벡터로 표시합니다.
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"
논리형 인덱싱 사용에 대한 다른 예제는 조건을 충족하는 배열 요소 찾기 항목을 참조하십시오.