Numpy의 배열과 3차원

헷갈리던 인덱싱과 브로드캐스팅도,
직접 손으로 만지며 감 잡은 나의 Numpy 탐험기🔍

Jun 13, 2025

Numpy는 꼭 써야 한다니까 그냥 열었고,
배열은 숫자 덩어리처럼만 느껴졌다.

처음엔 그랬다.

0부터 시작하는 인덱스는 왜 그렇게 헷갈리고,
arr[1:3, 2, -1]은 대체 뭘 의미하는지 도무지 감이 오지 않았다.

그런데 오늘,
손으로 직접 배열을 만들고 자르고, 한 줄씩 출력해보면서
배열이라는 세계가 어떻게 생겼는지 눈앞에 펼쳐지기 시작했다.

그리고 그 중심엔 Numpy가 있었다.


1. Numpy 배열

구분 설명 예시 코드 출력 결과
1차원 배열 리스트로 직접 생성 np.array([1, 2, 3]) [1 2 3]
2차원 배열 연속된 정수로 표 형태 만들기 np.arange(9).reshape((3, 3)) [[0 1 2] [3 4 5] [6 7 8]]
3차원 배열 2차원 배열을 여러 층으로 쌓기 np.arange(144).reshape((4, 6, 6)) 4개의 6×6 배열로 구성된 3차원 배열
층 선택 3번째 층
(인덱스 2)
전체 추출
arr_3d[2] [[72 73 74 75 76 77] [78 79 80 81 82 83] ... [102 103 104 105 106 107]]
차원 구조 확인 배열의 전체 구조 확인 arr_3d.shape (4, 6, 6)

2. 인덱싱 & 슬라이싱

arr_3d[2, 2:5, 1::2]
목표 코드 예시 설명
전 층의 3행 2열 값 뽑기 arr_3d[:, 3, 2] 모든 층에서 동일한 위치 값 (3행 2열)만 모아서 반환
짝수 인덱스 층의 모든 행, 3번째 열만 arr_3d[::2, :, 2] 0, 2층에서 모든 행의 3열 값만 뽑기
특정 층에서 일부 행, 홀수 열 선택 arr_3d[2, 2:5, 1::2] 3번째 층의 2~4행, 홀수 인덱스 열(1, 3, 5)만 추출

3. 브로드캐스팅

arr = np.array([[1, 2, 3],
                [4, 5, 6]])

row = np.array([1, 0, 1])
print(arr + row)

# [[2 2 4]
#  [5 5 7]]

row가 자동으로 위·아래로 복제돼서 2D 배열에 더해진 것.

구분 코드 예시 설명 출력 형태
2D 배열 + 스칼라 arr + 2 모든 요소에 2를 더함 동일한 shape 유지
2D 배열 + 1D 행 벡터 arr + row
(row = [1, 0, 1])
각 행에 row를 반복해서 더함 (2, 3)
2D 배열 + 1D 열 벡터 arr + col
(col = [[1], [2]])
각 열에 col을 세로로 브로드캐스팅 (2, 3)

4. 조건 마스크

arr1 = np.array([1, 2, 3, 4, 5])
arr2 = np.array([1, 3, 3, 0, 5])
mask = (arr1 >= 3) & (arr2 <= 4)
print("복합 조건:", mask)

#복합 조건: [False False  True False False]

조건 코드 예시 설명 출력 결과
arr1에서 값이 3 이상 arr1 >= 3 불리언 배열 반환 [False, False, True, True, True]
arr2에서 값이 4 이하 arr2 <= 4 불리언 배열 반환 [True, True, True, True, False]
두 조건 모두 만족 (arr1 >= 3) & (arr2 <= 4) 논리 AND 조합 [False, False, True, False, False]
조건값만 필터링 arr1[(arr1 >= 3) & (arr2 <= 4)] 해당하는 값만 추출 [3]

5. 축 연산(axis)

연산 방향 코드 예시 설명 출력 결과
열 기준 합 (세로 방향) np.sum(arr_2d, axis=0) 각 열끼리 더함 [6 8 10]
행 기준 합 (가로 방향) np.sum(arr_2d, axis=1) 각 행끼리 더함 [6, 15]

오늘을 마치며

오늘은 Numpy 배열의 구조부터
인덱싱, 브로드캐스팅, 조건 마스크, 축 연산까지
데이터를 ‘공간처럼’ 다루는 감각을 차근히 익혀봤다.

처음엔 단순한 숫자 나열처럼 보였지만,
배열 속에서 위치를 짚고, 조건을 걸고, 방향을 선택해 집계하는 과정은
마치 입체 퍼즐을 하나씩 풀어가는 과정 같았다.

데이터 분석은 단순 계산이 아니라,
구조를 이해하고, 의미를 추출해내는 작업이라는 걸
Numpy를 통해 직접 체감할 수 있었다.

감각을 계속 키워서, “더 복잡한 데이터도 명확하게 바라보는 분석가”가 되고 싶다.