4.4.2 2차원 배열의 첨자와 슬라이싱

[비유로 이해하기: 색종이 오리기] 행(가로)과 열(세로) 범위를 동시에 지정하여, 거대한 원본 공간에서 사각형 모양의 조각을 떼어냅니다. (데이터는 복사되지 않고 참조 뷰(View)를 제공합니다.)

[실전 꿀팁]: 문제집(X)과 정답지(y) 나누기 보통 엑셀 파일 형식의 데이터에서 맨 마지막 열이 ‘결과값(정답)’인 경우가 많습니다. a[:, :-1]은 결과값을 제외한 전체 문제집(입력 데이터) 영역을 가져오며, a[:, -1]은 맨 끝줄 정답값 부분만 별도로 추출해 줍니다.

다음 a는 5행 6열의 원소 30개의 2차원 배열이다.

a = np.arange(30).reshape(5, 6)
a

출력:

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]])

2차원 배열에서 a[3]은 첨자 3인 1차원 행 배열이다.

a[3]

출력:

array([18, 19, 20, 21, 22, 23])

첨자는 음수도 가능하며 첨자 -1은 마지막 첨자이다.

a[-1]

출력:

array([24, 25, 26, 27, 28, 29])

2차원 배열에서 두 번째 첨자인 :는 생략해도 무방하다.

a[-2, :]

출력:

array([18, 19, 20, 21, 22, 23])

2차원 배열에서 a[1:3]는 첨자 1에서 3-1까지의 행인 2차원 배열이다.

a[2:4]

출력:

array([[12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23]])

다음 코드는 1행과 3행으로 구성된 2차원 배열이 반환된다.

a[1:5:2]

출력:

array([[ 6,  7,  8,  9, 10, 11],
       [18, 19, 20, 21, 22, 23]])

다음 코드로 모든 행에 대해 열의 첨자 1인 1차원 배열이 반환된다.

a[:, 1]

출력:

array([ 1,  7, 13, 19, 25])

다음 코드로 열 첨자 1에서 5까지의 2차원 배열이 반환된다.

a[:, 1:6]

출력:

array([[ 1,  2,  3,  4,  5],
       [ 7,  8,  9, 10, 11],
       [13, 14, 15, 16, 17],
       [19, 20, 21, 22, 23],
       [25, 26, 27, 28, 29]])

다음 코드로 열 첨자 0, 2, 4로 구성된 2차원 배열이 반환된다.

a[:, ::2]

출력:

array([[ 0,  2,  4],
       [ 6,  8, 10],
       [12, 14, 16],
       [18, 20, 22],
       [24, 26, 28]])

다음 코드 a[i, j]는 행 첨자 i, 열 첨자 j인 스칼라 값이 반환된다.

a[2, 4]

출력:

16

다음 코드 a[i][j]a[i, j]와 같다.

a[2][4]

출력:

16

다음 코드로 행 첨자 1, 2, 열 첨자 2, 3, 4로 구성되는 2차원 배열이 반환된다.

a[1:3, 2:5]

출력:

array([[ 8,  9, 10],
       [14, 15, 16]])

다음 코드로는 같은 배열 a가 반환된다.

a[:, :]

출력:

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]])

다음 코드로는 원 배열 a의 행과 열이 모두 역순인 배열이 반환된다.

a[::-1, ::-1]

출력:

array([[29, 28, 27, 26, 25, 24],
       [23, 22, 21, 20, 19, 18],
       [17, 16, 15, 14, 13, 12],
       [11, 10,  9,  8,  7,  6],
       [ 5,  4,  3,  2,  1,  0]])
서브목차