시험공부빅데이터분석
← 보드Tensor · 4/11

인덱싱과 슬라이싱 — x[:, 1]과 x[:, 1:2]는 어떻게 다를까 ★★★ 시험 단골

Tensor에서 일부를 꺼내는 방법이에요. 규칙은 0장에서 배운 리스트와 똑같고, 2차원이면 x[행, 열]처럼 쉼표로 자리를 나눠요. 번호는 0부터이고, 콜론 :은 "그 자리 전부"예요.

x (3행 4열)열 0열 1열 2열 3
행 010203040
행 150607080
행 290100110120
print(x[0, 0]) print(x[1, 2]) print(x[0, :]) print(x[:, 1]) print(x[:2, :]) print(x[1:, 1:3]) print(x[::2, ::2])
tensor(10) tensor(70) tensor([10, 20, 30, 40]) tensor([ 20, 60, 100]) tensor([[10, 20, 30, 40], [50, 60, 70, 80]]) tensor([[ 60, 70], [100, 110]]) tensor([[ 10, 30], [ 90, 110]])
코드 줄무슨 뜻
x[0, 0]0행 0열 한 칸 → 10
x[1, 2]1행 2열 한 칸 → 70
x[0, :]0행, 열은 전부 → 첫 번째 행 전체
x[:, 1]행은 전부, 열은 1번 → 두 번째 열 전체 [20, 60, 100]
x[:2, :]행은 0, 1번(처음~2 앞), 열은 전부 → 앞의 두 행
x[1:, 1:3]행은 1번부터 끝까지, 열은 1, 2번 → 오른쪽 일부 영역
x[::2, ::2]행도 열도 2칸씩 건너뛰기 → 0, 2행과 0, 2열의 교차점

이제 가장 중요한 부분이에요. 정수로 고르면 그 차원이 사라지고, 슬라이스(a:b)로 고르면 길이가 1이어도 차원이 남아요.

한 줄 정의

자리에 "숫자 하나"를 쓰면 그 방향이 사라지고(shape에서 빠짐), 자리에 "a:b"를 쓰면 그 방향이 남아요(shape에 길이가 남음). 그래서 x[:, 1]은 한 줄(1차원)이고 x[:, 1:2]는 열 하나짜리 표(2차원)예요.

비유 — 엑셀에서 열 복사하기

엑셀에서 B열을 복사했는데 "한 줄로 쭉 풀어서 가져온 것"(1차원)과 "표 모양 그대로 열 하나만 가져온 것"(2차원)은 달라요. x[:, 1]은 풀어서 가져온 것이고, x[:, 1:2]는 표 모양을 유지한 것이에요.

시험 샘플 1번 — 직접 따라가 봐요
x = torch.arange(12).reshape(3, 4) a = x[:, 1] b = x[:, 1:2] print(tuple(a.shape)) print(tuple(b.shape))

1단계 — x를 만들어요. arange(12)는 0~11이고, reshape(3, 4)로 3행 4열로 나눠요.

x열 0열 1열 2열 3
행 00123
행 14567
행 2891011

2단계 — a = x[:, 1]. 열 자리에 정수 1 → 열 방향이 사라져요. 남는 건 행 방향 3개 한 줄이에요. 값은 [1, 5, 9], shape은 (3,).

3단계 — b = x[:, 1:2]. 열 자리에 1:2 → "1번 열부터 2 앞까지"라서 같은 열이지만 열 방향이 길이 1로 남아요. 값은 [[1], [5], [9]], shape은 (3, 1).

a = x[:, 1] 1 5 9 shape (3,) 한 줄, 1차원 b = x[:, 1:2] 1 5 9 shape (3, 1) 3행 1열, 2차원

그래서 출력은 (3,), (3, 1)이고 정답은 ② (3,) → (3, 1)이에요. 나머지 선택지는 이렇게 걸러져요.

선택지왜 오답인가
① (3,) → (3,)둘이 같다고 했지만 슬라이스 1:2는 차원을 남겨요
③ (1, 3) → (3, 1)a는 "한 행"이 아니라 길이 3짜리 한 줄이에요. (1, 3)이면 행이 1개 있는 표예요
④ (4,) → (4, 1)열을 골랐는데 길이가 4이면 행 방향이 4여야 해요. x는 3행이라 3이에요
⑤ (3, 1) → (3, 1)정수 1로 고른 a는 차원이 사라져서 (3, 1)이 될 수 없어요

같은 규칙으로 아래 결과를 표로 외워 두면 편해요. (x는 위 3×4 표예요.)

코드shape이유
x[:, 1](3,)열 자리가 정수 → 열 방향 사라짐
x[:, 1:2](3, 1)열 자리가 슬라이스 → 열 방향 길이 1로 남음
x[1](4,)행 자리가 정수 → 행 방향 사라짐. 열은 전부
x[1:2](1, 4)행 자리가 슬라이스 → 행 방향 길이 1로 남음
x[0, 0]()둘 다 정수 → 둘 다 사라져 숫자 하나(0차원)
x[0:1, 0:1](1, 1)둘 다 슬라이스 → 둘 다 남음

음수 번호도 써요. x[:, -1]은 맨 마지막 열, x[-1, :]은 맨 마지막 행, x[-2:, -2:]는 "오른쪽 아래 2×2 영역"이에요(수업 실습 4).

외우기 팁

"숫자는 지우고, 콜론은 남긴다". x[:, 1]은 숫자가 열을 지워 한 줄, x[:, 1:2]는 콜론(범위)이 열을 남겨 표예요. 답을 낼 때는 자리마다 "정수인가, 범위인가"만 표시하세요.

시험엔 이렇게 써요 — 이렇게 고르세요

① 원래 shape을 확인한다. ② 자리마다 정수(차원 삭제)인지 슬라이스(차원 유지)인지 구분한다. ③ 슬라이스 길이는 끝 − 시작이다(1:2는 1개, :2는 2개). ④ 남은 차원들의 크기를 순서대로 적으면 shape이다. 값을 직접 쓸 때는 0부터 번호를 붙인 표를 그려요.

잠깐 확인 — x가 (3, 4)일 때 x[1:3, 2]의 shape은?

(2,)예요. 행은 1~2번(2개)으로 남고, 열은 정수 2라서 사라져요.

다음 카드 → 조건으로 고르기 — Boolean indexing

자료: 2주차 · Week02_Tensor_and_GPU(pdf, 풀이포함 ipynb) · 빅분02(2주차) 녹취