Menu
Coddy logo textTech

차원별 인덱싱

Coddy의 NumPy 기초 코스 레슨 — 18개 중 13번째.

Numpy는 매우 강력한 도구인 차원 인덱싱(Indexing dimensions)을 지원합니다.

차원을 인덱싱하기 위해 콜론 :을 사용합니다. 콜론은 그것이 위치한 특정 인덱스의 모든 요소를 가져옵니다. 예를 들어, ary.shape # --> (2, 1, 3, 1)과 같은 형태의 배열이 있다고 가정할 때, ary[:, 0, 0, 0]과 같이 콜론 :을 배치하면 형태의 가장 왼쪽 두 요소를 가져오고, 각각에 대해 나머지 차원의 0번째 요소를 추출합니다.

참고: 대괄호 [] 내 콜론의 위치는 우리가 인덱싱하는 차원을 의미합니다.

  • ary[:, 0, 0, 0] 4차원(4D) 차원을 인덱싱합니다.
  • ary[0, :, 0, 0] 3차원(3D) 차원을 인덱싱합니다.
  • ary[0, 0, :, 0] 2차원(2D) 차원을 인덱싱합니다.
  • ary[0, 0, 0, :] 1차원(1D) 차원을 인덱싱합니다.
  • ary[:, :, 0, 0] 4차원과 3차원 차원을 인덱싱합니다.
  • 기타 등등

예제 1

ary = np.array([
	[1, 2], 
	[3, 4]
])
ary[:, 0] # --> [1, 3]
ary[0, :] # --> [1, 2]

콜론은 지정된 인덱스의 모든 요소를 가져와서 다음 인덱스로 계속 진행합니다.

우리의 경우: 

  • ary[:, 0] 모든 첫 번째 요소를 가져오고, 각 요소에서 0번째 요소를 가져옵니다.
  • ary[0, :] 첫 번째 요소를 가져오고, 그 요소 내의 모든 요소를 가져옵니다.

예제 2

3D 배열

ary = np.array([
	[[1, 2], [3, 4]],
	[[5, 6], [7, 8]]
])
ary[:, 0, :] # --> [[1, 2], [5, 6]]
ary[:, :, 0] # --> [[1, 3], [5, 7]]
  • ary[:, 0, :] 모든 요소를 가져온 다음, 첫 번째 요소를 가져오고 마지막으로 그 안의 모든 것을 가져옵니다.
  • ary[:, :, 0] 모든 요소를 가져온 다음, 이 모든 요소들을 가져오고 마지막으로 각각의 첫 번째 요소를 가져옵니다.
  • ary[0, :, :]의 출력 결과가 무엇일지 추측할 수 있나요?

예제 3

모든 행에서 첫 번째와 마지막 인덱스 가져오기

x = np.array([
	[ 0,  1,  2,  3,  4,  5],
	[ 6,  7,  8,  9, 10, 11],
	[12, 13, 14, 15, 16, 17],
	[18, 19, 20, 21, 22, 23],
])
x[:, np.array([0, -1])]
>>> [0, 5, 6, 11, 12, 17, 18, 23]

예제 4

도입부 예제와 동일하게 (2, 1, 3, 1) 형태를 가진 배열

ary = np.array([
    [
        [
            [1],[2],[3]
        ]
    ],
    [
        [
            [4],[5],[6]
        ]
    ]
])
ary[:, 0, 0, 0] # --> [1, 4]
ary[0, :, 0, 0] # --> [1]
ary[0, 0, :, 0] # --> [1, 2, 3]
ary[0, 0, 0, :] # --> [1]

참고: 슬라이싱(Slicing) 레슨에서 배운 슬라이싱 구문 start:stop:step을 사용하는 것도 가능합니다.

  • ary[:, 0:5, 2:3, :]
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

challenge icon

챌린지

쉬움

3차원 배열 ary가 주어지면, 각 1차원 배열에서 2번째, 3번째, 4번째 숫자를 추출하세요.

직접 해보기

import numpy as np
'''
ary looks like:
array([[[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9],
        [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]],

       [[20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
        [30, 31, 32, 33, 34, 35, 36, 37, 38, 39]],

       [[40, 41, 42, 43, 44, 45, 46, 47, 48, 49],
        [50, 51, 52, 53, 54, 55, 56, 57, 58, 59]],

       [[60, 61, 62, 63, 64, 65, 66, 67, 68, 69],
        [70, 71, 72, 73, 74, 75, 76, 77, 78, 79]],

       [[80, 81, 82, 83, 84, 85, 86, 87, 88, 89],
        [90, 91, 92, 93, 94, 95, 96, 97, 98, 99]]])
'''
ary = np.arange(0, 100).reshape(5, 2, 10) # don't change ary
res = ary[] # <-- Complete indices
print(str(res).replace("\n", "")) # don't change this line

NumPy 기초의 모든 레슨